Foros del Web » Programación para mayores de 30 ;) » .NET »

Genenar archivo txt con milies de registros

Estas en el tema de Genenar archivo txt con milies de registros en el foro de .NET en Foros del Web. Hola buenas tardes. Espero puedan ayudarme con este código lo agradecería mucho. Les platico: Tengo un servicio windows con el cual proceso, leo y guardo ...
  #1 (permalink)  
Antiguo 26/08/2011, 14:27
 
Fecha de Ingreso: julio-2011
Mensajes: 5
Antigüedad: 12 años, 9 meses
Puntos: 0
Genenar archivo txt con milies de registros

Hola buenas tardes.

Espero puedan ayudarme con este código lo agradecería mucho. Les platico:

Tengo un servicio windows con el cual proceso, leo y guardo en sql server la infomacion de miles de archivos este proceso es diario.
Actualmente tengo 3,642,667 de registros.

Existe un sitio web en donde el usuario realiza la busqueda por fechas ejemplo 2011-08-01 al 2011-08-15 con este rango de fechas la consulta del sql tarda 15 min , si realizan la busqueda con
rango de fechas 2011-08-01 al 2011-08-25 la consulta tarda 30 min esta informacion la guardo en dataset y genero un archivo txt. con la primer busqueda el archivo se genera bien pero con la segunda se cae
y marca este error : 'System.OutOfMemoryException'.

ya aumente el timeout del iis del servidor, agregue en el sitio web dentro del global.asax session timeout=2000 dentro de la conexion sql tengo oSQLCommand.CommandTimeout = 20000
en el webconfig <httpRuntime maxRequestLength="1048576" executionTimeout="36000"/>

y sigue pasando el mismo problema.

Les dejo el código y mi consulta en sql server.

private void GeneraTXT()
{
string strNombre = "";
lblMensaje.Text = "";
DataSet dts2 = new DataSet();
string sStatut = "F";
string xmlparam = "";

xmlparam = "<root>";
xmlparam += "<accion>C</accion>";
xmlparam += "<ID_GUIA>" + cambiaAmpersand(txtGuia.Text) + "</ID_GUIA>";
xmlparam += "<ID_CUENTA>" + cambiaAmpersand(txtCuenta.Text) + "</ID_CUENTA>";
xmlparam += "<ID_MAJOR>" + cambiaAmpersand(txtMajor.Text) + "</ID_MAJOR>";
xmlparam += "<FECHA_INI>" + cambiaAmpersand(fechaAAAAMMDD(txtFechaIni.Text)) + "</FECHA_INI>";
xmlparam += "<FECHA_FIN>" + cambiaAmpersand(fechaAAAAMMDD(txtFechaFin.Text)) + "</FECHA_FIN>";
xmlparam += "<FECHA_INI_SCL>" + cambiaAmpersand(fechaAAAAMMDD(txtFecha_Ini_Scl.Tex t)) + "</FECHA_INI_SCL>";
xmlparam += "<FECHA_FIN_SCL>" + cambiaAmpersand(fechaAAAAMMDD(txtFecha_Fin_Scl.Tex t)) + "</FECHA_FIN_SCL>";
xmlparam += "<orden>" + Orden.CampoOrden + "</orden>";
xmlparam += "<orden2>" + Orden.AscDes + "</orden2>";
xmlparam += "</root>";

ReaderAndWriter.ConnectionString = Session["ConnString"].ToString();
try
{
DataSet dts1 = new DataSet();
dts1 = ReaderAndWriter.OneParameterStoreProcCaller(Consta nts.sabt_reportes_reporte, xmlparam);
if (dts1.Tables[0].Rows.Count > 0)
{
strNombre = ConfigurationManager.AppSettings["GeneraTXT"].ToString() + "Reporte_Detalle" + dts1.Tables[1].Rows[0]["ID_PROCESO"].ToString() + ".txt";
string path = @"" + strNombre.ToString();

if (File.Exists(path))
{
File.Delete(path);
}
try
{
string[] rowString = new string[dts1.Tables[0].Rows.Count + 1];
rowString[0] = "GUIA|";
rowString[0] += "CUENTA|";
rowString[0] += "PRODUCTO|";
rowString[0] += "ORIGEN|";
rowString[0] += "DESTINO|";
rowString[0] += "SHIPMENT DATE|";
rowString[0] += "FECHA SCL|";
rowString[0] += "SCL|";
rowString[0] += "FECHA NEWFIN|";
rowString[0] += "NEWFIN|";
rowString[0] += "FECHA VOLTA|";
rowString[0] += "VOLTA|";
rowString[0] += "FECHA DVRA|";
rowString[0] += "DVRA|";
rowString[0] += "FECHA RARG|";
rowString[0] += "RARG|";
rowString[0] += "FECHA IBS|";
rowString[0] += "IBS|";
rowString[0] += "FECHA DSD|";
rowString[0] += "DSD|";
rowString[0] += "";

int i = 1; foreach (DataRow dr in dts1.Tables[0].Rows)
{
rowString[i] = dr.ItemArray.GetValue(0).ToString() + "|";
rowString[i] += dr.ItemArray.GetValue(1).ToString() + "|";
rowString[i] += dr.ItemArray.GetValue(2).ToString() + "|";
rowString[i] += dr.ItemArray.GetValue(3).ToString() + "|";
rowString[i] += dr.ItemArray.GetValue(4).ToString() + "|";
rowString[i] += dr.ItemArray.GetValue(5).ToString() + "|";
rowString[i] += dr.ItemArray.GetValue(6).ToString() + "|";
rowString[i] += dr.ItemArray.GetValue(7).ToString() + "|";
rowString[i] += dr.ItemArray.GetValue(8).ToString() + "|";
rowString[i] += dr.ItemArray.GetValue(9).ToString() + "|";
rowString[i] += dr.ItemArray.GetValue(10).ToString() + "|";
rowString[i] += dr.ItemArray.GetValue(11).ToString() + "|";
rowString[i] += dr.ItemArray.GetValue(12).ToString() + "|";
rowString[i] += dr.ItemArray.GetValue(13).ToString() + "|";
rowString[i] += dr.ItemArray.GetValue(14).ToString() + "|";
rowString[i] += dr.ItemArray.GetValue(15).ToString() + "|";
rowString[i] += dr.ItemArray.GetValue(16).ToString() + "|";
rowString[i] += dr.ItemArray.GetValue(17).ToString() + "|";
rowString[i] += dr.ItemArray.GetValue(18).ToString() + "|";
rowString[i] += dr.ItemArray.GetValue(19).ToString() + i++;
}

//string sFileName = ConfigurationManager.AppSettings["GeneraTXT"] + "Reporte_Detalle" + strPeriodo;
File.WriteAllLines(strNombre, rowString);
LlenaGrid();
}
catch (Exception e)
{
sStatut = "E";
lblMensaje.Text = "Imposible Crear el archivo" + e.Message;
}

xmlparam = "<root>";
xmlparam += "<accion>S</accion>";
xmlparam += "<ID_PROCESO>" + dts1.Tables[1].Rows[0]["ID_PROCESO"].ToString().Trim() + "</ID_PROCESO>";
xmlparam += "<ST_ESTATUS>" + sStatut + "</ST_ESTATUS>";
xmlparam += "</root>";

DataSet dts = new DataSet();
ReaderAndWriter.ConnectionString = Session["ConnString"].ToString();
dts = ReaderAndWriter.OneParameterStoreProcCaller(Consta nts.sabt_reportes_reporte, xmlparam);


}
}
catch (Exception objException)
{
ManejaError(objException, "LlenaGrid.");
}
}

CONSULTA


SELECT @ID_PROCESO = ISNULL(MAX(ID_PROCESO),0) + 1 FROM DD_PROCESO;
INSERT INTO DD_PROCESO (ID_PROCESO, FH_INICIO, ST_ESTATUS)
VALUES (@ID_PROCESO, GETDATE(), 'I');

--WITH OrderedOrders AS
--(
-- SELECT ID_GUIA
-- , ID_CUENTA
-- , ID_CUENTA_VTA
-- , ID_PRODUCTO
-- , NB_ORIGEN
-- , NB_DESTINO
-- , FH_CAPTURA
-- , ROW_NUMBER() OVER (ORDER BY ID_GUIA) AS 'RowNumber'
-- FROM MM_GUIAS (nolock)
--)
--SELECT ID_GUIA, ID_CUENTA, ID_CUENTA_VTA, ID_PRODUCTO, NB_ORIGEN, NB_DESTINO, FH_CAPTURA
--INTO #TmpRowsNum
--FROM OrderedOrders
--WHERE RowNumber BETWEEN 50 AND 70;


SELECT A.ID_GUIA
, A.ID_CUENTA
, A.ID_PRODUCTO
, A.NB_ORIGEN
, A.NB_DESTINO
, CONVERT(CHAR(10),A.FH_CAPTURA,103) AS FH_CAPTURA
, CONVERT(CHAR(10),A.FH_SCL,103) AS FH_SCL
, A.NB_SCL
, CONVERT(CHAR(10),A.FH_NEWFIN,103) AS FH_NEWFIN
, A.NB_NEWFIN
, CONVERT(CHAR(10),A.FH_VOLTA,103) AS FH_VOLTA
, A.NB_VOLTA
, CONVERT(CHAR(10),B.FH_RECIBIDO,103) AS FH_DVRA
, B.NB_ARCHIVO AS NB_DVRA
, CONVERT(CHAR(10),A.FH_RARG,103) AS FH_RARG
, A.NB_RARG
, CONVERT(CHAR(10),A.FH_IBS,103) AS FH_IBS
, A.NB_IBS
, CONVERT(CHAR(10),C.FH_SHIP,103) AS FH_DSD
, A.NB_DSD
, D.ID_MAJOR
INTO #TMPPASO
FROM MM_GUIAS A(nolock)
--INNER JOIN #TmpRowsNum E ON A.ID_GUIA = E.ID_GUIA AND A.ID_CUENTA = E.ID_CUENTA AND A.ID_CUENTA_VTA = E.ID_CUENTA_VTA AND A.ID_PRODUCTO = E.ID_PRODUCTO AND A.NB_ORIGEN = E.NB_ORIGEN AND A.NB_DESTINO = E.NB_DESTINO AND A.FH_CAPTURA = E.FH_CAPTURA
LEFT OUTER JOIN DD_DVRA B(nolock) ON A.ID_GUIA = B.ID_GUIA AND A.ID_CUENTA = B.ID_CUENTA AND A.ID_PRODUCTO = B.ID_PRODUCTO AND A.NB_ORIGEN = B.NB_ORIGEN AND A.NB_DESTINO = B.NB_DESTINO
LEFT OUTER JOIN DD_DSD C(nolock) ON A.ID_GUIA = C.ID_GUIA AND A.ID_CUENTA = C.ID_CUENTA AND A.ID_PRODUCTO = C.ID_PRODUCTO AND A.NB_ORIGEN = C.NB_ORIGEN AND A.NB_DESTINO = C.NB_DESTINO
LEFT OUTER JOIN MAJOR_ACCNT D(nolock) ON A.ID_CUENTA = D.ID_CUENTA AND D.ID_MAJOR = ISNULL (@ID_MAJOR, D.ID_MAJOR)
WHERE A.ID_CUENTA = ISNULL (@ID_CUENTA, A.ID_CUENTA)
AND A.ID_GUIA = ISNULL (@ID_GUIA, A.ID_GUIA)
AND A.FH_CAPTURA >= @FECHA_INI
AND A.FH_CAPTURA <= @FECHA_FIN
AND A.FH_SCL >= CAST (@FECHA_INI_SCL AS DATETIME)
AND A.FH_SCL <= CAST (@FECHA_FIN_SCL AS DATETIME)

EXEC ('SELECT * FROM #TMPPASO ORDER BY ' + @orden + ' ' + @orden2);


Última edición por senna5; 26/08/2011 a las 15:01
  #2 (permalink)  
Antiguo 28/08/2011, 14:58
Avatar de elhombredeblanko  
Fecha de Ingreso: junio-2011
Ubicación: México Lindo y Querido
Mensajes: 212
Antigüedad: 12 años, 10 meses
Puntos: 2
Respuesta: Genenar archivo txt con milies de registros

puede hacerlo con
Cita:
streamwriter
buscate infor sobre eso,, ah viene todo y es completamente facil
__________________
si siempre hay algo nuevo que aprender

Etiquetas: registros, sql, txt
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 05:13.