2012-01-19 11 views
0

私はhttp://homeandlearn.co.uk/NET/nets12p9.htmlのコードを使用してデータベースにレコードを追加しています。 コマンドビルダを使用すると、エラーメッセージが表示されません。データベースにレコードを追加するVB.NETエラー

新しい行のDataRowコレクションを渡すときに有効なInsertCommandが必要です。

しかし、私がアップデートを行うと、まだエラーメッセージが表示されます。これをどうすれば解決できますか?

これは私のコードです:

Dim dbProv As String 
Dim dbSource As String 
Dim con As New OleDb.OleDbConnection 
Dim ds As New DataSet 
Dim da As New OleDb.OleDbDataAdapter 
Dim sql As String 
Dim Command As OleDb.OleDbCommand 
Dim dr As DataRow 
Dim cb As New OleDb.OleDbCommandBuilder(da) 

sql = "SELECT * FROM Cliënten" 
dbProv = "PROVIDER=Microsoft.Jet.OLEDB.4.0;" 
dbSource = "Data Source = [mydatabase]" 
con.ConnectionString = dbProv & dbSource 
con.Open() 
da = New OleDb.OleDbDataAdapter(sql, con) 
da.Fill(ds, "Cliënten") 

dr = ds.Tables("Cliënten").NewRow() 
dr.Item("Field1") = TextBox1.Text 
dr.Item("Field2") = TextBox2.Text 
ds.Tables("Cliënten").Rows.Add(dr) 

da.Update(ds, "Cliënten") 
MsgBox("New Record added to the Database") 

con.Close() 

答えて

0

da.Update(作るために)動作しますが、あなたはその後、データアダプターが自動的にそれを実行し、有効なInsertCommandはを割り当てる必要があります。ここでは例:

da.InsertCommand = New OleDb.OleDbCommand("INTERT INTO Cliënten (Field1, Field2) VALUES (@field1, @field2)") 
da.InsertCommand.Parameters.Add(New OleDb.OleDbParameter("@field1", OleDb.OleDbType.VarChar, 0, "Field1")) 
da.InsertCommand.Parameters.Add(New OleDb.OleDbParameter("@field2", OleDb.OleDbType.VarChar, 0, "Field2")) 
da.Update(ds, "Cliënten") 

WARNING:私はあなたがフィールド1とフィールド2のためのOleDb.OleDbType.VarCharを使用していると推定しました。そうでない場合は、正しいDBデータ形式に置き換える必要があります。

+1

私は、CommandBuilderクラスを考えますSELECTだけに基づいてINSERTを自動生成するはずです... –

0

私がと読んだところでは、に基づいてCommandBuilderINSERTコマンドを自動生成するように見えます。

私はあなたがあまりにも早くあなたのCommandBuilderオブジェクトを作成していると思います - あなたはSELECTコマンドを指定する前などの接続を初期化/すなわち

おそらくこれは良い仕事があります...

Dim dbProv As String 
Dim dbSource As String 
Dim con As New OleDb.OleDbConnection 
Dim ds As New DataSet 
Dim da As New OleDb.OleDbDataAdapter 
Dim sql As String 
Dim Command As OleDb.OleDbCommand 
Dim dr As DataRow 

sql = "SELECT * FROM Cliënten"    'Consider specifying columns 
              'individually rather than using * 
dbProv = "PROVIDER=Microsoft.Jet.OLEDB.4.0;" 
dbSource = "Data Source = [mydatabase]" 
con.ConnectionString = dbProv & dbSource 
con.Open() 
da = New OleDb.OleDbDataAdapter(sql, con) 

Dim cb As New OleDb.OleDbCommandBuilder(da) 'Init CommandBuilder here 
cb.RefreshSchema()       'This may also help 

da.Fill(ds, "Cliënten") 
dr = ds.Tables("Cliënten").NewRow() 
dr.Item("Field1") = TextBox1.Text 
dr.Item("Field2") = TextBox2.Text 
ds.Tables("Cliënten").Rows.Add(dr) 

da.Update(ds, "Cliënten") 
MsgBox("New Record added to the Database") 

con.Close() 
関連する問題