Principales respuestas
InsertCommand.Parameters (Ayuda)

Pregunta
-
Hola que tal a todos, bien estaria trabado en una parte del proyecto con el codigo InsertCommand.Parameters que es el que designe para hacer una Insert en Tablas. Bien, tengo que seleccionar un Datagrid en el cual uso la linea:
dabol1.InsertCommand.Parameters("@descon").Value = Me.grddetalle.Item(a, 1).Value
Donde lo que necesito es seleccionar del datagrid "grddetalle" la 2da Columna que es Descripcion.
Es al grabar una Tabla, tengo los siguientes codigos
'graba boleta dabol1.InsertCommand.Parameters("@numbol").Value = Me.txtnum.Text dabol1.InsertCommand.Parameters("@cod_abo").Value = Me.txtcodabo.Text dabol1.InsertCommand.Parameters("@nom_abo").Value = Me.txtnomabo.Text dabol1.InsertCommand.Parameters("@apel_abo").Value = Me.txtapelabo.Text dabol1.InsertCommand.Parameters("@fecemi").Value = Me.dtfecemi.Text dabol1.InsertCommand.Parameters("@total").Value = Me.txttotal.Text dabol1.InsertCommand.Parameters("@descon").Value = Me.grddetalle.Item(a, 1).Value 'graba tempboleta datembol.InsertCommand.Parameters("@numbol1").Value = Me.txtnum.Text datembol.InsertCommand.Parameters("@cod_abo1").Value = Me.txtcodabo.Text datembol.InsertCommand.Parameters("@apelabo1").Value = Me.txtapelabo.Text datembol.InsertCommand.Parameters("@nomabo1").Value = Me.txtnomabo.Text datembol.InsertCommand.Parameters("@dniabo1").Value = Me.txtdniabo.Text datembol.InsertCommand.Parameters("@dirabo1").Value = Me.txtdirabo.Text datembol.InsertCommand.Parameters("@total1").Value = Me.txttotal.Text datembol.InsertCommand.Parameters("@fecemi1").Value = Me.dtfecemi.Text datembol.InsertCommand.Parameters("@estado1").Value = Me.txtestado.Text ''fin graba tempboleta cn.Open() iresultado = dabol1.InsertCommand.ExecuteNonQuery() iresultado1 = datembol.InsertCommand.ExecuteNonQuery() lblregistro.Visible = True lblregistro.Text = iresultado & " " & "Registro Guardado " 'fin graba boleta Try Dim i As Integer For i = 0 To grddetalle.Rows.Count - 1 'llena tabla detalle Dim cmd As New SqlCommand("INSERT into detalle(numbol,cod_con,mespago, montocon) VALUES(@numbol,@cod_con,@mespago, @montocon)", cn) With cmd .Parameters.Add(New SqlParameter("@numbol", SqlDbType.NVarChar, 12)).Value = txtnum.Text .Parameters.Add(New SqlParameter("@cod_con", SqlDbType.NVarChar)).Value = grddetalle.Item(0, i).Value .Parameters.Add(New SqlParameter("@mespago", SqlDbType.DateTime)).Value = grddetalle.Item(2, i).Value .Parameters.Add(New SqlParameter("@montocon", SqlDbType.Float)).Value = grddetalle.Item(3, i).Value End With 'llena la tabla tempdetallebol Dim cmd1 As New SqlCommand("INSERT into tempdetallebol(numbol,cod_con,descon,mespago, montocon) VALUES(@numbol1,@cod_con1,@descon1,@mespago1, @montocon1)", cn) With cmd1 .Parameters.Add(New SqlParameter("@numbol1", SqlDbType.NVarChar, 12)).Value = txtnum.Text .Parameters.Add(New SqlParameter("@cod_con1", SqlDbType.NVarChar)).Value = grddetalle.Item(0, i).Value .Parameters.Add(New SqlParameter("@descon1", SqlDbType.NVarChar)).Value = grddetalle.Item(1, i).Value .Parameters.Add(New SqlParameter("@mespago1", SqlDbType.DateTime)).Value = grddetalle.Item(2, i).Value .Parameters.Add(New SqlParameter("@montocon1", SqlDbType.Float)).Value = grddetalle.Item(3, i).Value End With '---llena la tabla reporte---' Dim cmd2 As New SqlCommand("INSERT into reporte(numbol,cod_con,descon,mespago, montocon) VALUES(@numbol2,@cod_con2,@descon2,@mespago2, @montocon2)", cn) With cmd2 .Parameters.Add(New SqlParameter("@numbol2", SqlDbType.NVarChar, 12)).Value = txtnum.Text .Parameters.Add(New SqlParameter("@cod_con2", SqlDbType.NVarChar)).Value = grddetalle.Item(0, i).Value .Parameters.Add(New SqlParameter("@descon2", SqlDbType.NVarChar)).Value = grddetalle.Item(1, i).Value .Parameters.Add(New SqlParameter("@mespago2", SqlDbType.DateTime)).Value = grddetalle.Item(2, i).Value .Parameters.Add(New SqlParameter("@montocon2", SqlDbType.Float)).Value = grddetalle.Item(3, i).Value End With '---fin codigo reporte---' Dim cmd2 As New SqlCommand("INSERT into boleta(descon) VALUES(@descon2)", cn) With cmd2 .Parameters.Add(New SqlParameter("@descon2", SqlDbType.NVarChar)).Value = grddetalle.Item(a, 1).Value End With cmd.ExecuteNonQuery() cmd1.ExecuteNonQuery() cmd2.ExecuteNonQuery() Next Catch sqlExc As SqlException MsgBox("Registros Insertados Correctamente", MsgBoxStyle.Exclamation, "Registro de la boleta") cn.Close() End Try
Este es el Datagrid grddetalle.
Me sale este error al darle Clic en Guardar:
Desde ya muchas gracias, y un gran saludo!
ID: GranJK! S2!
Respuestas
-
El error que te sale puede ocurrir por dos razones:
Una, puede ser culpa de Parameters("@descon"). Si en la coleccion de parametros del command no existe @descon, dara el error que estas viendo.
Dos, puede ser por culpa de Item(a, 1). Si en el grid no existe la fila "a" o la columna 1 dara el error de indice.
Para saber cual de las dos cosas esta ocurriendo, utiliza el debugger cuando se te pare en la fila del error y examina los valores de los datos. Empieza por la variable "a", a ver que valor tiene, no vaya a ser que sea menor que cero o mayor o igual que el numero de filas del grid (recuerda que se numeran desde cero). Si el valor es correcto, revisa la estructura del grid a ver si tiene la columna 1 (no vaya a ser que estes accediendo a otra instancia que no sea la misma que se ve en pantalla). Y revisa tambien la coleccion de parametros del command a ver si realmente contiene @descon. No te fies del hecho de que lo definiste correctamente con ese parametro. Revisa el valor real que contiene en ese momento, no vaya a ser que a lo largo de la ejecucion del programa pase por algun punto donde se borren los parametros o se cree una nueva instancia.- Marcado como respuesta GranJK lunes, 13 de mayo de 2019 13:52
Todas las respuestas
-
El error que te sale puede ocurrir por dos razones:
Una, puede ser culpa de Parameters("@descon"). Si en la coleccion de parametros del command no existe @descon, dara el error que estas viendo.
Dos, puede ser por culpa de Item(a, 1). Si en el grid no existe la fila "a" o la columna 1 dara el error de indice.
Para saber cual de las dos cosas esta ocurriendo, utiliza el debugger cuando se te pare en la fila del error y examina los valores de los datos. Empieza por la variable "a", a ver que valor tiene, no vaya a ser que sea menor que cero o mayor o igual que el numero de filas del grid (recuerda que se numeran desde cero). Si el valor es correcto, revisa la estructura del grid a ver si tiene la columna 1 (no vaya a ser que estes accediendo a otra instancia que no sea la misma que se ve en pantalla). Y revisa tambien la coleccion de parametros del command a ver si realmente contiene @descon. No te fies del hecho de que lo definiste correctamente con ese parametro. Revisa el valor real que contiene en ese momento, no vaya a ser que a lo largo de la ejecucion del programa pase por algun punto donde se borren los parametros o se cree una nueva instancia.- Marcado como respuesta GranJK lunes, 13 de mayo de 2019 13:52
-
Hola Alberto, gracias por tu pronta respuesta, y bien si como decias a no genera ningun valor o mejor dicho es igual a 0. Por ende estoy haciendo mal la consulta. Como corroboro el nombre correto de la columna (1, x) se que es 1 porque (0, x) es CODCON. Seria correcto usar (1, i) ?
NOTA: Me acabo de responder solo, muchas gracias Alberto, era una tonteria delante de mis ojos! Un gran abrazo!
ID: GranJK! S2!
- Editado GranJK lunes, 13 de mayo de 2019 13:55