2017-04-08 15 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 "'はありません)である場合に最適ではありません。しかし、なぜあなたはIDを挿入していますか?それはDBの仕事だ。 – Plutonix

+0

@Plutonix私は、da.insertcommand = cmdは "クエリを実行する"という意味ですか? StudentIDフィールドは、データベースに宣言するときのテキストです。私はIDを挿入します。なぜなら、ボタンをクリックするとIDが挿入されるからです。最初にIDを持つ新しい行が作成されます(IDはテキストで、テキストボックスから入力されます) – Bruce

+0

私はあなたのようにデータアダプタを使用したことはありません。それがどのように機能するかを見てください。アダプタ(cmd.ExecuteNonQuery())を使わずに直接コマンドを使用するか、insertコマンドでデータアダプタを設定し、パラメータを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は、自動的に「そうでなければ、(挿入、更新を追加し、データアダプタにコマンドを削除しますです手動で設定する必要があります)。

+0

試してみるのは良い考えです。しかし、それについてもっと詳しく教えてもらえますか?どのようにアダプターを構成できますか。私はあなたの部分(あなたが言ったあなたの部分を除いてすべてをコメントしてください)で試しましたが、それは十分ではないと思ってエラーを言うと思います。あなたに例をあげてください、または何かを与えてください。 – Bruce

+0

私は自分の答えを更新しました。私の以前の答えは、tableadapterとdataadapterを混同していました。真実私はしばらくの間、datadapterを使用していない私はより簡単に型付きのデータセットとtableadapterを使用して、プログラミングミスを防ぐのに役立ちます。それらに精通していない場合は、msdnでそれらを見てください。一度それらから始めると、タイプのないデータセットには戻りません。 –

関連する問題