none
Error de Windows al ingresar datos a uan tabla en vb.net RRS feed

  • Debate general

  •  

    Estoy intentando implementar una aplicación que me permita ingresar datos de estudiantes a una base de datos. La misma es muy básica. Per ocurre un error que ya detalle mas adelante

    El código en cuestión es el siguiente

     

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

    Dim conn as oledbConnection

    Dim cmd as oledbCommand

    conn=new oledbConnection("Provider=Microsoft.SQLSERVER.CE.OLEDB.3.5;Data source=C:\Users\Admin\MyDocuments\students.sdf")

    try

         conn.open()

         cmd=new oledbCommand("INSERT INTO StudentsTBL VALUES(@id,@apellidos,@nombre,@grupo)",conn)

    cmd.parameters.AddWithValues("@id",txtId.text)

    cmd.parameters.AddWithValues("@apellidos",txtApellidos.text)

    cmd.parameters.AddWithValues("@nombre",txtNombre.text)

    cmd.parameters.AddWithValues("@grupo",txtGrupo.text)

    cmd.executenonquerry()

         conn.close()    

         Catch ex As Exception

    msgbox ex.Message

         End Try

         end sub

     

     

    Al iniciar la depuración empieza todo bien, hasta que al presionar el control Button1, aparece un menaje de Windows que indica lo siguiente:

    'svhost32.exe dejó de funcionar'

    Me parece –porque ya lo probé con otras alternativas, inclusive cambiando la cadena sql- que el problema esta en uno o varios parámetros del command. ¿Qué debo hacer?

     




    lunes, 14 de enero de 2013 23:51

Todas las respuestas

  • Hola

    La conexión no se si esta bien configurada, lo que si veo es que la query esta mal, te falta indicar la columnas de las tablas, seria de esta forma:

    cmd=new oledbCommand("INSERT INTO StudentsTBL (id,apellidos,nombre,grupo) VALUES(@id,@apellidos,@nombre,@grupo)",conn)


    Saludos desde Barcelona.

    • Editado AGTROI martes, 15 de enero de 2013 0:02
    lunes, 14 de enero de 2013 23:59
  • Una pregunta:

    Que motor de Bd estas usando? porque tu cadena de conexion apunta hacia un archivo .SDF y eso claramente es una Bd SqlCompact, aunque tambien estas parte en la misma esta mal:

    ("Provider=Microsoft.SQLSERVER.CE.OLEDB.3.5;Data source=C:\Users\Admin\MyDocuments\students.sdf")

    Este es un ejemplo de una cadena de conexion SqlCompact:

           connectionString="Data Source =C:\Documents and Settings\.....\my documents\visual studio 2010\Projects\WindowsApplication1\WindowsApplication1\BdPruebaCE.sdf"
           providerName="System.Data.SqlServerCe.3.5" />

    Ahora, Si estas apuntando hacia una BD SqlCompact tus objetos de Acceso a datos deberan de ser los correspondientes al motor de BD SqlServerCompact, es decir, deberas de cambiar esto:

    Dim conn as oledbConnection
    
    Dim cmd as oledbCommand
    
    'Por esto:
    
    Dim conn as SqlCeConnection
    
    Dim cmd as SqlCeCommand
    
    conn=new SqlCeConnection

     Despues de eso, analiza lo que te comenta AGTROI y agrega los camos de tu tabla que desea afectar siguiendo siempre esta sintaxis:

    "INSER INTO NomTabla (Campo1, Campo2, Campo3) _ 
     VALUES (@param1, @param2, @param3)"

    Te dejo un ejemplo de como debes de actuar en consecuencia del motor de BD que hayas elegido:

    Private Sub Button1_Click(...)
    	Using cnx As New SqlConnection("TuCadenaDeConexion")
    		Dim SqlGuardar As string
    		SqlGuardar = "INSERT INTO Nom_tutabla (Campo1, campo2) VALUES (@param1, @param2)"
    		Dim cmd As New SqlCommand(SqlGuardar, cnx)
    		cmd.Parameters.AddWithValue("@param1", TextBox1.Text)
    		cmd.Parameters.AddWithValue("@param2", TextBox2.Text)
    		cnx.Open()
    		cmd.ExecuteNonQuery()
    	 End Using
    End Sub

    En el ejemplo, utilizo una BD SqlServer como veras todos los objetos del Ado.Net de Acceso a datos son propios del motor.

    Analiza todo los comentado, aplica los cambios y nos comentas!


    Saludos desde Monterrey, Nuevo León, México!!!


    martes, 15 de enero de 2013 0:21
  • Buenas AGTROI: Te digo que la cadena de conexión que uso si esta bien configurada... de hecho fue lo primero que probé... además, según tengo entendido, cuando vas a rellenar todos los campos de la tabla, se omiten los nombres de los campos en la instruccion SQL y simplemente se colocan los VALUES -algo que también se usa en Access- Pero tratare de probar con la sugerencia que me das.
    martes, 15 de enero de 2013 16:32
  • Efectivamente cambie de OleDb a SQLServer y funcionó sin problemas... pero hice una modificación -espero en Dios que los puristas no me crucifiquen-

     En lugar de usar

    "INSERT INTO StudentsTBL (id,apellidos,nombre,grupo) VALUES (@param1, @param2,@param3,@param4)"

    use este otro:

    "INSERT INTO StudentsTBL VALUES (@param1, @param2,@param3,@param4)"

    ...y funciona exactamente igual. Ademas omití la instrucción  provider... y todo perfecto

    Gracias...

    martes, 15 de enero de 2013 16:58