Too many arguments to

14/09/2005 - 00:18 por Enrique Rodríguez | Informe spam
Hola a todos.

A ver si alguien me puede ayudar con este problemita.

Intento insertar datos de un dataTable que se encuentra en un DataSet hacia
una tabla de una BD en SQL por medio de un StoreProcedure.
De tal manera que tengo que irle pasando los parametros al SP antes de
ejecutarlo pero me marca el error del subject y solo inserta el primer
registro.
Les paso el codigo que estoy empleando a ver si alguien me puede decir que
estoy haciendo mal.

oConnSql.Open()

For columna = 1 To oDs.Tables(0).Columns.Count - 1

For fila = 0 To oDs.Tables(0).Rows.Count - 1

campo1 = oDs.Tables(0).Columns(columna).ColumnName

campo2 = oDs.Tables(0).Rows(fila).Item(0).ToString()

campo3 = oDs.Tables(0).Rows(fila).Item(columna).ToString()

com.Parameters.Add("@campo1_1", campo1)

com.Parameters.Add("@campo2_2", campo2)

com.Parameters.Add("@campo3_3", campo3)

Try

com.ExecuteNonQuery()

Catch ex As SqlException

Mensaje.Text = ex.Message

End Try

Next fila

Next columna

oConnSql.Close()

Preguntas similare

Leer las respuestas

#1 Leonardo Azpurua [mvp vb]
14/09/2005 - 00:36 | Informe spam
"Enrique Rodríguez" escribió en el mensaje
news:
Intento insertar datos de un dataTable que se encuentra en un DataSet
hacia una tabla de una BD en SQL por medio de un StoreProcedure.
De tal manera que tengo que irle pasando los parametros al SP antes de
ejecutarlo pero me marca el error del subject y solo inserta el primer
registro.
Les paso el codigo que estoy empleando a ver si alguien me puede decir que
estoy haciendo mal.



Hola,

El objeto Command no limpia la colección Parameters al ejecutarse, de manera
que para la segunda iteración estás tratando de agregar más parámetros de
los necesarios, con nombre duplicados, ademas.

Una solución podria ser:

oConnSql.Open()


' Agregas los parametros
com.Parameters.Add("@campo1_1")
com.Parameters.Add("@campo2_2")
com.Parameters.Add("@campo3_3")

For columna = 1 To oDs.Tables(0).Columns.Count - 1
For fila = 0 To oDs.Tables(0).Rows.Count - 1
campo1 = oDs.Tables(0).Columns(columna).ColumnName
campo2 = oDs.Tables(0).Rows(fila).Item(0).ToString()
campo3 = oDs.Tables(0).Rows(fila).Item(columna).ToString()
Try


com.Parameters(0).Value = campo1
com.Parameters(1).Value = campo2
com.Parameters(2).Value = campo3
com.ExecuteNonQuery()

Catch ex As SqlException
Mensaje.Text = ex.Message
End Try
Next fila
Next columna
oConnSql.Close()



Salud!
Respuesta Responder a este mensaje
#2 Enrique Rodríguez
14/09/2005 - 17:38 | Informe spam
Funciono excelente Leonardo.

Muchas gracias

"Leonardo Azpurua [mvp vb]" <l e o n a r d o (arroba) m v p s (punto) o r g>
escribió en el mensaje news:%

"Enrique Rodríguez" escribió en el mensaje
news:
Intento insertar datos de un dataTable que se encuentra en un DataSet
hacia una tabla de una BD en SQL por medio de un StoreProcedure.
De tal manera que tengo que irle pasando los parametros al SP antes de
ejecutarlo pero me marca el error del subject y solo inserta el primer
registro.
Les paso el codigo que estoy empleando a ver si alguien me puede decir
que estoy haciendo mal.



Hola,

El objeto Command no limpia la colección Parameters al ejecutarse, de
manera que para la segunda iteración estás tratando de agregar más
parámetros de los necesarios, con nombre duplicados, ademas.

Una solución podria ser:

oConnSql.Open()


' Agregas los parametros
com.Parameters.Add("@campo1_1")
com.Parameters.Add("@campo2_2")
com.Parameters.Add("@campo3_3")

For columna = 1 To oDs.Tables(0).Columns.Count - 1
For fila = 0 To oDs.Tables(0).Rows.Count - 1
campo1 = oDs.Tables(0).Columns(columna).ColumnName
campo2 = oDs.Tables(0).Rows(fila).Item(0).ToString()
campo3 = oDs.Tables(0).Rows(fila).Item(columna).ToString()
Try


com.Parameters(0).Value = campo1
com.Parameters(1).Value = campo2
com.Parameters(2).Value = campo3
com.ExecuteNonQuery()

Catch ex As SqlException
Mensaje.Text = ex.Message
End Try
Next fila
Next columna
oConnSql.Close()



Salud!


Respuesta Responder a este mensaje
#3 Enrique Rodríguez
14/09/2005 - 18:16 | Informe spam
Alguien me puede orientar de como hacer para que no se dupliquen los datos
en la tabla?

Saludos y gracias.

"Leonardo Azpurua [mvp vb]" <l e o n a r d o (arroba) m v p s (punto) o r g>
escribió en el mensaje news:%

"Enrique Rodríguez" escribió en el mensaje
news:
Intento insertar datos de un dataTable que se encuentra en un DataSet
hacia una tabla de una BD en SQL por medio de un StoreProcedure.
De tal manera que tengo que irle pasando los parametros al SP antes de
ejecutarlo pero me marca el error del subject y solo inserta el primer
registro.
Les paso el codigo que estoy empleando a ver si alguien me puede decir
que estoy haciendo mal.



Hola,

El objeto Command no limpia la colección Parameters al ejecutarse, de
manera que para la segunda iteración estás tratando de agregar más
parámetros de los necesarios, con nombre duplicados, ademas.

Una solución podria ser:

oConnSql.Open()


' Agregas los parametros
com.Parameters.Add("@campo1_1")
com.Parameters.Add("@campo2_2")
com.Parameters.Add("@campo3_3")

For columna = 1 To oDs.Tables(0).Columns.Count - 1
For fila = 0 To oDs.Tables(0).Rows.Count - 1
campo1 = oDs.Tables(0).Columns(columna).ColumnName
campo2 = oDs.Tables(0).Rows(fila).Item(0).ToString()
campo3 = oDs.Tables(0).Rows(fila).Item(columna).ToString()
Try


com.Parameters(0).Value = campo1
com.Parameters(1).Value = campo2
com.Parameters(2).Value = campo3
com.ExecuteNonQuery()

Catch ex As SqlException
Mensaje.Text = ex.Message
End Try
Next fila
Next columna
oConnSql.Close()



Salud!


Respuesta Responder a este mensaje
#4 Leonardo Azpurua [mvp vb]
14/09/2005 - 18:47 | Informe spam
"Enrique Rodríguez" escribió en el mensaje
news:
Alguien me puede orientar de como hacer para que no se dupliquen los datos
en la tabla?



Hola:

Imagino que con no escribirlos dos veces debe bastar :-)

Una opción es crear una restricción ("constraint") que especifique que
cierta combinación de valores en algunas columnas (no necesariamente la
clave principal) sea única.

La otra, si tu SGBD no soporta restricciones, es que verifiques si ya existe
un registro con esos valores antes de grabar, y que generes una excepción (o
ejecutes RAISERROR si lo haces desde un SP en SQLServ) en caso de que
exista.

Salud!
Respuesta Responder a este mensaje
#5 Enrique Rodríguez
14/09/2005 - 19:33 | Informe spam
Muchas gracias de nuevo Leonardo.

Opte por la primera opcion y resulto de maravilla

Saludos

"Leonardo Azpurua [mvp vb]" <l e o n a r d o (arroba) m v p s (punto) o r g>
escribió en el mensaje news:

"Enrique Rodríguez" escribió en el mensaje
news:
Alguien me puede orientar de como hacer para que no se dupliquen los
datos en la tabla?



Hola:

Imagino que con no escribirlos dos veces debe bastar :-)

Una opción es crear una restricción ("constraint") que especifique que
cierta combinación de valores en algunas columnas (no necesariamente la
clave principal) sea única.

La otra, si tu SGBD no soporta restricciones, es que verifiques si ya
existe un registro con esos valores antes de grabar, y que generes una
excepción (o ejecutes RAISERROR si lo haces desde un SP en SQLServ) en
caso de que exista.

Salud!


email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida