Grandes cantidades de datos

14/04/2007 - 03:24 por SoftMedia | Informe spam
Hola a todos,
Estoy desarrollando una aplicación en Winform y una de las cosas que hace es
cargar unos datatable desde unos archivos de texto plano mediante un parser
de texto que me he fabricado, estos archivos cada semana tienen más registros
(ya van por alrededor de 1.000.000). Estos datatables los hago que se cargen
en la base de datos (SQL Server 2005 SE) como una transacción en bloque de
con la siguiente función:

Public Function cargar_tablas(ByVal dt() As DataTable) As Boolean
Dim qs(4) As String
qs(0) = "SELECT * FROM ASUNTOS"
qs(1) = "SELECT * FROM CONTRATOS"
qs(2) = "SELECT * FROM TITULARES"
qs(3) = "SELECT * FROM MOVIMIENTOS"
qs(4) = "SELECT * FROM INTERVINIENTES"

conexion.Open()

Dim trans As SqlTransaction = conexion.BeginTransaction

Try

Dim da0 As New SqlDataAdapter()
Dim cb0 As SqlCommandBuilder = New SqlCommandBuilder(da0)
da0.SelectCommand = New SqlCommand(qs(0), conexion)
da0.SelectCommand.Transaction = trans
da0.Fill(dt(0))
da0.Update(dt(0))

Dim da1 As New SqlDataAdapter()
Dim cb1 As SqlCommandBuilder = New SqlCommandBuilder(da1)
da1.SelectCommand = New SqlCommand(qs(1), conexion)
da1.SelectCommand.Transaction = trans
da1.Fill(dt(1))
da1.Update(dt(1))

Dim da2 As New SqlDataAdapter()
Dim cb2 As SqlCommandBuilder = New SqlCommandBuilder(da2)
da2.SelectCommand = New SqlCommand(qs(2), conexion)
da2.SelectCommand.Transaction = trans
da2.Fill(dt(2))
da2.Update(dt(2))

Dim da3 As New SqlDataAdapter()
Dim cb3 As SqlCommandBuilder = New SqlCommandBuilder(da3)
da3.SelectCommand = New SqlCommand(qs(3), conexion)
da3.SelectCommand.Transaction = trans
da3.Fill(dt(3))
da3.Update(dt(3))

Dim da4 As New SqlDataAdapter()
Dim cb4 As SqlCommandBuilder = New SqlCommandBuilder(da4)
da4.SelectCommand = New SqlCommand(qs(4), conexion)
da4.SelectCommand.Transaction = trans
da4.Fill(dt(4))
da4.Update(dt(4))


trans.Commit()
Catch ex As Exception
trans.Rollback()
conexion.Close()
Return False
End Try
conexion.Close()
Return True
End Function

Hasta aquí todo bien, trada en hacerlo, pero no importa demasiado porque
solo se hace una vez por semana, pero si supierais una mejor manera, mejor.
El problema gordo está en que cuando cargo una de las tablas con muchísimos
registros en un dataset y lo visualizo en un datagridview la operación puede
tardar más de 2 minutos y esto no se puede permitir porque eso si es una
práctica habitual y crítica. Yo solo he trabajado con datasets y pocos
registros y esto se me hace un poco cuesta arriba, ¿Hay alguna manera mejor
para optimizar la carga de este datagridview y en general para tratar con
estas grandes cantidades de registros?
Muchas gracias de antemano.
Un saludo.

Preguntas similare

Leer las respuestas

#21 SoftMedia
19/04/2007 - 22:00 | Informe spam
Hola Alberto, muchas gracias por toda tu ayuda.
Ha habido un cambio en la forma de actuar por parte de mi cliente. Hasta
ahora la forma de actuar era la siguiente: Se elimina la tabla de la base de
datos que contenía los datos del último archivo de texto recibido y se
introducen los datos del nuevo archivo recibido, con lo cual se machaca toda
la información anterior al ser borrado los anteriores datos de la tabla.
Ahora este señor quiere que cuando les llegue el nuevo archivo no machaque
los datos anteriores, sino que solo modifique los datos diferentes (a nivel
de campo) e inserte los nuevos registros.
¿Hay alguna manera fácil de hacer esto en SQL Server 2005/ADO.NET?
Muchas gracias de nuevo.
Respuesta Responder a este mensaje
#22 Alberto Poblacion
20/04/2007 - 12:49 | Informe spam
"SoftMedia" wrote in message
news:
Ahora este señor quiere que cuando les llegue el nuevo archivo no machaque
los datos anteriores, sino que solo modifique los datos diferentes (a
nivel
de campo) e inserte los nuevos registros.
¿Hay alguna manera fácil de hacer esto en SQL Server 2005/ADO.NET?



No especialmente fácil. Por cada registro recibido se hace un
Update...Where... en la base de datos para modificar los datos existentes,
si los hay. Se examina el "RowsAffected" que devuelve el Update, y si es
cero significa que el registro no existía, y entonces se hace un Insert para
añadirlo.
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida