Hola Andres,

Lo de usar stored procedures o no es opcional, si preparas el comando al
principio del proceso y lo usas repetidas veces en el insert, no creo que
encuentres diferencias importantes en el rendimiento. Hay otras razones por las
cuales puede ser aconsejable usar SPs.

Incluso, podes usar parametros (Parameters de ADO.NET) aunque no uses stored
procedures.

Contanos como te fue, si podes.

Carlos Peix 

> -----Original Message-----
> From: puntonet@mug.org.ar [mailto:[EMAIL PROTECTED] On 
> Behalf Of Andrés Guzmán O
> Sent: Martes, 16 de Octubre de 2007 10:21 p.m.
> To: puntonet@mug.org.ar
> Subject: [puntonet] Ingreso Masivo de Datos
> 
> OK voy a probar en realidad es mejor trabajar con 
> procedimientos almacenados voy a hacerlo como me dices y te 
> comento, gracias!!!
> 
> 
> Andrés
> ----- Original Message ----- 
> From: "Carlos Peix" <[EMAIL PROTECTED]>
> To: <puntonet@mug.org.ar>
> Sent: Tuesday, October 16, 2007 6:53 PM
> Subject: [puntonet] Ingreso Masivo de Datos
> 
> 
> Hola Andres,
> 
> Creo que la clave esta en el Catch que haces sin mostrar la 
> excepcion, esto
> quiere decir que si estas teniendo una excepcion luego de 
> insertar el primer
> registro, la ejecucion termina luego de insertarlo y nunca te 
> enteras de la
> anomalia.
> 
> Te propongo otra version del codigo que mandaste donde aprovecho para 
> sugerirte
> codigo un poco mas claro (en mi opinion). Atencion, no puedo 
> escribir codigo
> VB.NET de memoria, asi que sepan disculpar.
> 
> ' Es mejor crear el comando antes y reutilizarlo, ademas,
> ' es MUY recomendabe utilizar parametros.
> Dim agregar As New SqlCommand("INSERT INTO OrdenMantencion (OMEquipo, 
> OMTipo,
> ...) VALUES ( @Equipo, @Tipo,... )")
> 
> ' Es mucho mejor realizar la conexión una sola vez
> ' al principio y cerrarla al final (en el Finally).
> conn.Open()
> agregar.Connection = conn
> 
> Try
> ' Aca tambien deberias usar parametros
> Dim da As New SqlDataAdapter("SELECT NombrePC FROM FichaEquipo WHERE
> Sala='" & Me.DDSalasala.SelectedValue.Trim & "'", conn)
> 
> Dim dsOM As New DataSet()
> da.Fill(dsOM, "Equipos")
> 
> Dim dt As DataTable
> dt = dsOM.Tables(0)
> 
> 'AQUI DONDE PRETENDO INGRESARLOS EN LA OTRA TABLA!
> ' (confirmar sintaxis de For Each)
> For Each DataRow row in dt.Rows
> Dim equipo As String
> 
> 'AQUI SELECCIONO EL DATO DE LA TABLA ANTERIOR PARA SER INGRESADO
> EN LA NUEVA TABLA
> 
> equipo = row.Item("NombrePC")
> 
> ' No me gusta mucho la siguiente linea de codigo, yo
> ' no accederia a elementos de la interfaz a usuario dentro
> ' de un proceso masivo como este.
> Me.ListBox1.Items.Add(equipo)
> 
> agregar.Parameters["Equipo"] = equipo
> agregar.Parameters["Tipo"] =
> Me.DDNombreProgSala.SelectedValue.Trim
> agregar.ExecuteNonQuery()
> Next
> 
> Finally
> conn.Dispose()
> 
> End Try
> 
> Algunos comentarios:
> - No utilice el Catch. Si no vas a hacer naad especifico en 
> el catch lo 
> mejor es
> no usarlo de manera que la excepcion llegue a niveles superiores.
> - Agregue el Finally donde debe cerrarle la conexión (con 
> llamar a Dispose 
> es
> suficiente).
> - Es aconsejable utilizar parametros para evitar ataques por 
> SQLInjection,
> ademas de facilitar considerablemente el manejo de distintos 
> tipos de datos.
> 
> Carlos Peix
> 
> > -----Original Message-----
> > From: puntonet@mug.org.ar [mailto:[EMAIL PROTECTED] On
> > Behalf Of [EMAIL PROTECTED]
> > Sent: Martes, 16 de Octubre de 2007 05:40 p.m.
> > To: puntonet@mug.org.ar
> > Subject: [puntonet] Ingreso Masivo de Datos
> >
> > Hola amigos tengo un problema que me tiene realmente chato,
> > lo que necesito es traer datos desde una tabla y despues para
> > cada uno de estos datos debo ingresarlos en otra tabla con
> > otros datos. El codigo que tengo es el siguiente en teoria me
> > debería funcionar, pero el problema es que de los datos que
> > traigo de la primera tabla solo ingreso rl primer dato en 
> la segunda.
> >
> > Bueno aqui esta el código ojala me entiendan y me den una
> > manito creo que el problema esta en el for pero eh probado de
> > varias formas y no me resulta.
> >
> > Try
> >
> > 'AQUI TRAIGO LOS DATOS DE LA TABLA
> >
> >              Dim da As New SqlDataAdapter("SELECT NombrePC
> > FROM FichaEquipo WHERE Sala='" &
> > Me.DDSalasala.SelectedValue.Trim & "'", conn)
> >
> >              Dim dsOM As New DataSet()
> >              da.Fill(dsOM, "Equipos")
> >
> >              Dim dt As DataTable
> >              Dim dv As DataView
> >
> >              dt = dsOM.Tables(0)
> >              dv = dt.DefaultView
> >
> >              Dim n1 As Integer = dt.Rows.Count
> >
> >              Dim i As Integer
> >
> > 'AQUI DONDE PRETENDO INGRESARLOS EN LA OTRA TABLA!
> >
> >              For i = 0 To (n1 - 1)
> >                  Dim equipo As String
> >
> > 'AQUI SELECCIONO EL DATO DE LA TABLA ANTERIOR PARA SER
> > INGRESADO EN LA NUEVA TABLA
> >
> >                  equipo = dt.Rows(i).Item("NombrePC")
> >                  Me.ListBox1.Items.Add(equipo)
> >
> >                  Dim agregar As New SqlCommand("INSERT INTO
> > OrdenMantencion (OMEquipo, OMTipo, OMSala, OMFecha, OMHora,
> > Mantencion, Registro, DEjecucion, DTermino, HInicio,
> > HTermino) VALUES ( '" & equipo & "','" &
> > Me.DDNombreProgSala.SelectedValue.Trim & "','" &
> > Me.DDSalasala.SelectedValue.Trim & "', '" &
> > Me.TxtFechaSala.Text.Trim & "', '"
> > & Me.TxtHoraSala.Text.Trim & "', '" &
> > Me.TxtmantencionSala.Text.Trim & "','" &
> > Me.TxtRegistroSala.Text.Trim & "','" & Me.TxtDESala.Text.Trim
> > & "','" & Me.TxtDTSala.Text.Trim & "','" &
> > Me.TxtHISala.Text.Trim & "','" & Me.TxtHTSala.Text.Trim & "' )")
> >
> >                  agregar.Connection = conn
> >                  conn.Open()
> >                  agregar.ExecuteNonQuery()
> >
> >              Next
> >                  conn.Close()
> >                  conn.Dispose()
> >
> >          Catch ex As Exception
> >
> >          End Try
> >
> > Agradecer cualquier comentario o ayuda gracias de antemano!
> >
> 
> 
> 
> __________ NOD32 2595 (20071016) Information __________
> 
> This message was checked by NOD32 antivirus system.
> http://www.eset.com
> 
> 


Responder a