2017-04-08 83 views
0

我嘗試使用命令DataAdapter.InsertCommand將新記錄添加到數據庫。但我不知道爲什麼它不會插入新記錄到數據庫無法使用DataAdapter.insertCommand添加新行到數據庫vb.net

這裏是我的代碼:

Private Sub btnAdd_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAdd.Click 
    Dim cnn As New OleDb.OleDbConnection 
    Dim cmd As New OleDb.OleDbCommand 
    Dim da As New OleDb.OleDbDataAdapter 
    Dim ds As New DataSet 
    Dim dt As New DataTable 
    cnn.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=D:\1_Project\Project_of_VB_Net\AccessDatabase\StudentDatabase.accdb" 
    cmd.Connection = cnn 
    cmd.CommandText = "INSERT INTO StudentData(StudentID) VALUES (@studentid)" 
    cmd.Parameters.AddWithValue("@studentid", "123") 
    Try 
     cnn.Open() 
     da.InsertCommand = cmd 
    Catch ex As Exception 
     Console.WriteLine(ex.Message) 
    Finally 
     cnn.Close() 
    End Try 
End Sub 

請幫我找出什麼地方錯了?

+0

您需要執行查詢。 'AddWithValue'是次優的,特別是如果'StudentId'是一個數字('「123」'不是)。但是你爲什麼要插入Ids?這是數據庫的工作。 – Plutonix

+0

@Plutonix我認爲da.insertcommand = cmd意思是「執行查詢」? StudentID字段是我在數據庫中聲明的文本。我插入的ID,因爲我想當我點擊按鈕添加,它會創建一個新的行有一個ID第一(ID是一個文本,並從文本框中放入) – Bruce

+0

我從來沒有使用像你一樣的數據適配器,看看它會如何工作。直接使用不帶適配器的命令(cmd.ExecuteNonQuery())或使用insert命令配置dataadaptor,將參數映射到studentid字段,然後將記錄插入到數據表中並運行da.Update(dt) –

回答

1

我大家都贊成使用什麼工作,我看到上述解決方案的作品。然而,使用數據適配器的好處是它包裝了數據表的CRUD操作所需的所有sql命令。您可以配置自己的命令,或者讓visual studio使用sqlcommandbuilder自動配置它們。然後,一旦你已經配置了適配器所有你需要做的就是這樣的事情

Dim myds As New DataSet() 
    Dim mytable as New datatable() 
    myds.Tables.Add(mytable) 
    Dim myconstr As String = "ConnectionStringtoDataBase" 
    Dim myconn As New SqlConnection(myconstr) 

    Dim da as new SqlDataAdapter(「SELECT * FROM StudentTable」,cnn) 
    Dim mycb As New SqlCommandBuilder(da) 
    da.Fill(mytable) 
    Dim myrow As DataRow = mytable.NewRow() 
    myrow("ID") = "thestudentid" 
    myrow("StudentName") = "John doe" 
    myrow("StudentID") = 12345 
    myrow("StudentClass") = "VB 101" 
    mytable.Rows.Add(myrow) 
    da.Update(mytable) 

的CommandBuilder的會自動添加插入,更新和刪除命令DataAdapter的(如果你選擇的命令只有一個表,否則你」必須手動配置它)。

+0

這似乎是一個好主意嘗試。但是,請您告訴我更多關於它的細節?我如何配置適配器。我嘗試了你的部分(除了你所說的部分外,評論所有內容)但我認爲這還不夠,它會說錯誤。請給我一個例子或東西 – Bruce

+0

我已經更新了我的答案。我以前的答案將tableadapter與dataadapter混淆了。事實是,我沒有使用數據適配器很長一段時間,我發現使用類型化數據集和表適配器更容易,並有助於防止編程錯誤。如果你不熟悉它們,請在msdn中查看它們。一旦你開始使用它們,你將不會回到無類型的數據集。 –