Visual Basic.NET - Velocidad al leer fichero plano y hacer insert

 
Vista:

Velocidad al leer fichero plano y hacer insert

Publicado por Marta (49 intervenciones) el 22/01/2007 18:20:52
Tengo una aplicación que lo que hago es leer un fichero plano y meter cada linea del fichero en una tabla de mi base de datos Oracle.

Cuando el fichero a leer contiene muchas filas, puede llegar a tener 100.000, el proceso es muy lento...

Estoy probando con ficheros de unas 1000 filas y me tarda unos 7 minutos... yo creo que se puede hacer algo para que sea más rápido... alguna idea???

Voy leyendo fila a fila y se hace un commit por cada fila insertada:

Dim blnSalida As Boolean = False
Dim cmd As OracleCommand
Dim conexion As OracleConnection
Dim sql As String

conexion = New OracleConnection(AppSettings("cadenaConexion"))

conexion.Open()
cmd = New OracleCommand
cmd.Connection = conexion

sql = " insert into FICHERO_NAVIERA (ID_FICHERO_HISTORIAL, FECHACARGA, ESTADOCUPON, ANYOFACTURACION, " & _
" TRIMESTREFACTU, CODCOMPANYIA, NUMSERIEBILLETE, " & _
" NUMEMBARQUE, PUNTOVENTABILLETE, TIPOSUBVENCION, FECHAEMISION, TRAYECTO, " & _
" COMPANYIAUTIL, FECHAEMBARQUE, INDICADOR, CODACOMODACION, TARIFAINICIAL, " & _
" PORCENBONIRESI, PORCENBONIFAMI, PORCENBONIMILI, IMPORTEFINAL, TIPOACREDITACION, " & _
" NUMDOCUMENTO, NOMBREAPELLIDOS, CODMUNICIPIO, SELECCIONMUESTRA, OBSERVACIONESDGMM, TARJFAMNUM, ERRORVERADICIONALES) values " & _
"( " & IIf(item.id_fichero_historial.id_historial_naviera = 0, 0, item.id_fichero_historial.id_historial_naviera) & ", " & _
" " & IIf(item.FechaCarga = Nothing, "null", "'" & item.FechaCarga & "'") & ", " & _
" " & item.estadoCupon.cod_cupon & ", " & _
" " & IIf(item.AnyoFacturacion = "", "null", "'" & item.AnyoFacturacion & "'") & ", " & _
" " & IIf(item.TrimestreFactu = "", "null", "'" & item.TrimestreFactu & "'") & ", " & _
" " & IIf(item.CodCompanyia.codigo = "", "null", "'" & item.CodCompanyia.codigo & "'") & ", " & _
" " & IIf(item.NumSerieBillete = "", "null", "'" & item.NumSerieBillete & "'") & ", " & _
" " & IIf(item.NumEmbarque = "", "null", "'" & item.NumEmbarque & "'") & ", " & _
" " & IIf(item.PuntoVentaBillete = "", "null", "'" & item.PuntoVentaBillete & "'") & ", " & _
" " & IIf(item.TipoSubvencion = "", "null", "'" & item.TipoSubvencion & "'") & ", " & _
" " & IIf(item.FechaEmision = Nothing, "null", "'" & item.FechaEmision.ToShortDateString & "'") & ", " & _
" " & IIf(item.Trayecto = "", "null", "'" & item.Trayecto & "'") & ", " & _
" " & IIf(item.CompanyiaUtil.codigo = "", "null", "'" & item.CompanyiaUtil.codigo & "'") & ", " & _
" " & IIf(item.FechaEmbarque = Nothing, "null", "to_date('" & (item.FechaEmbarque) & "','dd/mm/yyyy hh24:mi ss')") & ", " & _
" " & IIf(item.Indicador = "", "null", "'" & item.Indicador & "'") & ", " & _
" " & IIf(item.CodAcomodacion = "", "null", "'" & item.CodAcomodacion & "'") & ", " & _
" " & IIf(item.TarifaInicial = 0, 0, "'" & item.TarifaInicial & "'") & ", " & _
" " & IIf(item.PorcenBoniResi = 0, 0, "'" & item.PorcenBoniResi & "'") & ", " & _
" " & IIf(item.PorcenBoniFami = 0, 0, "'" & item.PorcenBoniFami & "'") & ", " & _
" " & IIf(item.PorcenBoniMili = 0, 0, "'" & item.PorcenBoniMili & "'") & ", " & _
" " & IIf(item.ImporteFinal = 0, 0, "'" & item.ImporteFinal & "'") & ", " & _
" " & IIf(item.TipoAcreditacion = "", "null", "'" & item.TipoAcreditacion & "'") & ", " & _
" " & IIf(item.NumDocumento = "", "null", "'" & item.NumDocumento & "'") & ", " & _
" " & IIf(item.NombreApellidos = "", "null", "'" & item.NombreApellidos & "'") & ", " & _
" " & IIf(item.CodMunicipio = "", "null", "'" & item.CodMunicipio & "'") & ", " & _
" " & IIf(item.seleccionMuestra = "", "null", "'" & item.seleccionMuestra & "'") & ", " & _
" " & IIf(item.observacionesDGMM = "", "null", "'" & item.observacionesDGMM & "'") & ", " & _
" " & IIf(item.TarjFamNum = "", "null", "'" & item.TarjFamNum & "'") & ", " & _
" " & IIf(item.ErrorVerAdicionales = "", "null", "'" & item.ErrorVerAdicionales & "'") & " )"

cmd.CommandText = sql
cmd.ExecuteNonQuery()

cmd.Dispose()
conexion.Close()
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Velocidad al leer fichero plano y hacer insert

Publicado por stuardo (2 intervenciones) el 24/01/2007 21:08:10
yo me encontre con ese problema, comunmente, la diferencia es que yo uso mysql, y la solucion que le encontre fue usar el mismo motor de base de datos de mysql con la instruccion LOAD DATA, no se si hay algo parecido en oracle..., le doy la instruccion con ado y lo hace mucho mas rapido que insertar linea por linea...

espero ye ayude
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Velocidad al leer fichero plano y hacer insert

Publicado por thessen (298 intervenciones) el 26/01/2007 13:50:25
En principio, utilizaria parametros en el insert en lugar de concatenar cadenas y las inserciones las haria a traves de un datatable/dataadapter con el update. Si no quieres utilizar este método, te recomendaria que concatenases las cadenas a traves de un StringBuilder en lugar de & y que buscases la manera de eliminar esos iif ya que son muy lentos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar