2017-04-08 87 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中查看它们。一旦你开始使用它们,你将不会回到无类型的数据集。 –