2012-09-28 36 views
13

Tôi mới để vb.net tôi cần phải chèn dữ liệu trong bảng bằng cách sử dụng vb.net xin vui lòng có thể bất kỳ một sự giúp đỡLàm thế nào tôi có thể Chèn dữ liệu vào SQL Server sử dụng VBNet

Tôi đã cố gắng này

Ở đây tôi đã cố gắng mẫu Mã

tôi có ngoại lệ này Column name or number of supplied values does not match table definition. nhờ tiến

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

Bạn nên hiển thị cho chúng tôi định nghĩa _table_. Có thể bạn đã quên tạo cột pk 'IDENTITY'với tính năng tự động. Btw, bạn đang mở cho SQL-Injection. Bạn nên sử dụng ['SqlParameters'] (http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlparameter.aspx). –

+0

bảng của tôi 'defn' là' sinh viên (SName, SID, SPhone, SBranch, SCourse, SFee) ' tất cả thuộc về' varchar' loại trừ 'lệ phí' ('phí là loại thực') – rangasathish

+1

@rangasathish - đó không phải là định nghĩa bảng. Dễ nhất là đi đến bảng bằng cách sử dụng SQL Server Management Studio (SSMS). Nhấp chuột phải vào nó, chọn "Script Table -> As Create -> To Clipboard". Sau đó, * chỉnh sửa * câu hỏi của bạn và dán vào kết quả. Nó sẽ hiển thị cho chúng ta * kiểu dữ liệu * cho bảng, mọi ràng buộc *, v.v. –

Trả lời

16

Nó có nghĩa là số các giá trị specifie d trong mệnh đề VALUES của bạn trên câu lệnh INSERT không bằng tổng số cột trong bảng. Bạn phải chỉ định tên cột nếu bạn chỉ cố gắng chèn vào các cột đã chọn.

Một số khác, vì bạn đang sử dụng ADO.Net, luôn tham số hóa truy vấn của mình để tránh SQL Injection. Những gì bạn đang làm ngay bây giờ là bạn đang đánh bại việc sử dụng sqlCommand.

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 

PS: Vui lòng thay đổi tên cột được chỉ định trong truy vấn đến cột gốc tìm thấy trong bảng.

+0

Lưu ý phụ: 'conn.Close' là thừa vì bạn đang sử dụng' using-statement'. –

+0

@TimSchmelter cảm ơn vì đã nhắc nhở :) nhưng tôi đã từng làm điều đó. Dù sao, tôi chỉ cập nhật câu trả lời của tôi. –

+2

Tôi sẽ bỏ phiếu +2 nếu tôi có thể quảng bá các truy vấn được tham số – 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 
Các vấn đề liên quan