2012-09-28 40 views
13

Soy nuevo en vb.net tengo que insertar datos en la tabla utilizando vb.net por favor, ¿alguien ayudar¿Cómo puedo insertar datos en SQL Server utilizando VBNet

He intentado esto

Aquí Probé Ejemplo de código

tengo esta excepción Column name or number of supplied values does not match table definition. gracias avanzar

Private Sub btnSave_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSave.Click 

    Dim strName As String = txtName.Text 
    Dim strId As String = txtID.Text 
    Dim strPhone As String = txtPhone.Text 
    Dim strBranch As String = cmboxBranch.SelectedItem.ToString() 
    Dim strCourse As String = cmbboxCourse.SelectedItem.ToString() 
    Dim dblFee As Double = Double.Parse(txtFee.Text) 

    Dim strCommand As String = "insert into student values('" & strName & "','" & strId & "','" & strPhone & "','" & strBranch & "','" & strCourse & "'," & dblFee & ")" 

    Dim command As SqlCommand = New SqlCommand(strCommand, connection) 
    command.CommandType = CommandType.Text 

    '' MsgBox(strCommand) 

    connection.Open() 
    If (command.ExecuteNonQuery().Equals(1)) Then 
     MsgBox("Information stored in database") 
    Else 
     MsgBox("Not stored in database") 
    End If 

End Sub 
+0

Debería mostrarnos la _table definition_. Tal vez se haya olvidado de convertir '' IDENTIDAD' la columna de pk con autoincrement. Por cierto, estás abierto para SQL-Injection. Debería usar ['SqlParameters'] (http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlparameter.aspx). –

+0

mi tabla 'defn' es' student (SName, SID, SPhone, SBranch, SCourse, SFee) ' todos son de tipo' varchar' excepto 'fee' (' tarifa es de tipo real') – rangasathish

+1

@rangasathish - eso no es una definición de tabla. Lo más fácil es ir a la mesa usando SQL Server Management Studio (SSMS). Haga clic derecho, elija "Tabla de scripts -> Como crear -> Al portapapeles". Luego * edita * tu pregunta y pega el resultado. Nos mostrará los * tipos de datos * para la tabla, cualquier * constraints *, etc. –

Respuesta

16

esto significa que el número de valores spécifié d en la cláusula VALUES en la declaración INSERT no es igual al número total de columnas en la tabla. Debe especificar el nombre de columna si solo intenta insertar en las columnas seleccionadas.

Otra, ya que está usando ADO.Net, siempre parametrizó su consulta para evitar SQL Injection. Lo que está haciendo ahora es que está derrotando el uso de sqlCommand.

ex

Dim query as String = String.Empty 
query &= "INSERT INTO student (colName, colID, colPhone, " 
query &= "      colBranch, colCourse, coldblFee) " 
query &= "VALUES (@colName,@colID, @colPhone, @colBranch,@colCourse, @coldblFee)" 

Using conn as New SqlConnection("connectionStringHere") 
    Using comm As New SqlCommand() 
     With comm 
      .Connection = conn 
      .CommandType = CommandType.Text 
      .CommandText = query 
      .Parameters.AddWithValue("@colName", strName) 
      .Parameters.AddWithValue("@colID", strId) 
      .Parameters.AddWithValue("@colPhone", strPhone) 
      .Parameters.AddWithValue("@colBranch", strBranch) 
      .Parameters.AddWithValue("@colCourse", strCourse) 
      .Parameters.AddWithValue("@coldblFee", dblFee) 
     End With 
     Try 
      conn.open() 
      comm.ExecuteNonQuery() 
     Catch(ex as SqlException) 
      MessageBox.Show(ex.Message.ToString(), "Error Message") 
     End Try 
    End Using 
End USing 

PD: Por favor, cambiar los nombres de columna especificados en la consulta a la columna original que se encuentra en su mesa.

+0

Nota al margen: el 'conn.Close' es redundante ya que está usando' using-statement' de todos modos. –

+0

@TimSchmelter gracias por recordar :) pero solía hacer eso. De todos modos, solo actualizo mi respuesta. –

+2

Yo votaría +2 si pudiera para la promoción de consultas parametrizadas – jeroenh

4
Imports System.Data 

Imports System.Data.SqlClient 

Public Class Form2 

Dim myconnection As SqlConnection 

Dim mycommand As SqlCommand 

Dim dr As SqlDataReader 

Dim dr1 As SqlDataReader 

Dim ra As Integer 


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


    myconnection = New SqlConnection("server=localhost;uid=root;pwd=;database=simple") 

    'you need to provide password for sql server 

    myconnection.Open() 

    mycommand = New SqlCommand("insert into tbl_cus([name],[class],[phone],[address]) values ('" & TextBox1.Text & "','" & TextBox2.Text & "','" & TextBox3.Text & "','" & TextBox4.Text & "')", myconnection) 

    mycommand.ExecuteNonQuery() 

    MessageBox.Show("New Row Inserted" & ra) 

    myconnection.Close() 

End Sub 

End Class 
Cuestiones relacionadas