sabeis pq sale este error?

27/04/2005 - 09:22 por Sonia | Informe spam
' indice 0 no valido para oledbparametercollection con count=0 '

lo q hago es, desde un datagrid, selecciono una fila y le doy al boton
'actualizar' y aparece un form con los datos de la fila en textbox para q
los pueda modificar. lo mismo tengo con un boton 'anyadir' q se abre el form
con los textbox vacios para añadirlos yo. me da este error empezando por 0 o
por 1. os pongo el codigo por si podeis decirme q es lo q puedo hacer.

gracias


Private Sub Anyadir_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Anyadir.Click
Dim Cadena As String = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" &
ArchivoDatos & ";Persist Security Info=False"

Dim sCadSQL As New StringBuilder

sCadSQL.Append("Insert Into Contactos ")

sCadSQL.Append(" NOMBRE, APELLIDOS, CARGO, ID_COL, HORARIO, EMAIL Values
(?,?,?,?,?,?)")

Dim Cnn As New OleDbConnection(Cadena)

Dim Cmd As OleDbCommand = New OleDbCommand(sCadSQL.ToString, Cnn)

Cnn.Open()

Try

With Cmd

.CommandType = CommandType.Text

.Parameters(0).Value = "nombre"

.Parameters(1).Value = "apellidos"

.Parameters(2).Value = "cargo"

.Parameters(3).Value = "codigocole"

.Parameters(4).Value = "horario"

.Parameters(5).Value = "mail"

.ExecuteNonQuery()

End With

Catch ex As Exception

MessageBox.Show(ex.Message, ex.Source, MessageBoxButtons.OK,
MessageBoxIcon.Error)

Finally

Cmd = Nothing

Cnn.Dispose()

Cnn.Close()

End Try

End Sub

Preguntas similare

Leer las respuestas

#6 Tristan
29/04/2005 - 20:08 | Informe spam
Sonia, pero es que lo que tienes se parece poco a lo que yo te he dicho ;-)

Por un lado, así no es más eficiente. Lo que te decía es que la conexión y
el comando se deben crear en un punto que solo se ejecute una vez, y no cada
vez que añades un contacto tal y como lo tienes. Además, tienes comentada la
parte del Insert de Sql. No se si lo habrás probado quitando el comentario.
Tal y como está escrito, tiene que dar error al ejecutar el comando. Además,
primero das valor a los parámetros mientras los añades (Add) y luego lo
vuelves a asignar con el Value.

Lo que tienes que hacer (exactamente) es esto:

Class TuForm

inherits System.Windows.Forms.Form



Todo lo que tenga tu Form

...


Private conexion As OleDbConnection

Private comando As OleDbCommand



'Si ArchivoDatos no es constante, deberás mover la definición de la
conexión

'al lugar en el que asignes su valor

Private ArchivoDatos As String = "TuArchivoDeDatos.mdb"



Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MyBase.Load

conexion = New
OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;" & _

Data Source=" & ArchivoDatos & ";Persist Security
Info=False")

comando = New OleDbCommand( _

"INSERT INTO Contactos " & _

"(Nombre, Apellidos, Cargo, Horario, Email) " & _

"VALUES (@Nombre, @Apellidos, @Cargo, @Horario, @Email)")

comando.Connection = conexion



Dim p As OleDbParameterCollection = comando.Parameters

p.Add("@Nombre", OleDbType.VarChar)

p.Add("@Apellidos", OleDbType.VarChar)

p.Add("@Cargo", OleDbType.VarChar)

p.Add("@Horario", OleDbType.VarChar)

p.Add("@Email", OleDbType.VarChar)

End Sub



Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button1.Click

Dim p As OleDbParameterCollection = comando.Parameters

p("@Nombre").Value = "ValorNombre"

p("@Apellidos").Value = "ValorApellidos"

p("@Cargo").Value = "ValorCargo"

p("@Horario").Value = "ValorHorario"

p("@Email").Value = "ValorEmail"

Try

conexion.Open()

comando.ExecuteNonQuery()

Catch exc As OleDbException

MsgBox(exc.ToString())

Finally

If conexion.State = ConnectionState.Open Then

conexion.Close()

End If

End Try

End Sub

...

End Class



Pero te sugeriría, hasta que tengas claro como funciona ado.net, que
utilices el diseñador. Te hará todo el trabajo. Solo tienes que seleccionar
del cuadro de herramientas, donde están los controles, el grupo de datos,
arrastrar un objeto OleDbCommand a tu formulario y rellenar las propiedades
Connection y CommandText siguiendo los asistentes.

Juan Carlos Badiola
MVP - C#
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida