お世話になります
SqlCommandBuilderクラスによる自動生成が上手く動きません。
仕様でしたら回避策をご教示お願いいたします。
Sub test2()
Dim conn As New SqlConnection(ConnectionString)
Dim da As SqlDataAdapter
Dim ds As New DataSet
Dim cmd As New SqlCommand
Dim r As DataRow
Dim sqlCmdBldr As SqlCommandBuilder
conn.Open()
'//// データセットにTABLE1をセット
da = New SqlDataAdapter
cmd.Connection = conn
cmd.CommandText = "select * from TABLE1"
da.SelectCommand = cmd
da.Fill(ds, "t_TABLE1")
'//// データセットにTABLE2をセット
cmd.CommandText = "select * from TABLE2"
da.SelectCommand = cmd
da.Fill(ds, "t_TABLE2")
'//// データセットTABLE1をレコードを追加
r = ds.Tables("t_TABLE1").NewRow
r.Item("AAA") = "ABCDEFG"
ds.Tables("t_TABLE1").Rows.Add(r)
sqlCmdBldr = New SqlCommandBuilder(da) '<----- ココ
'///ここでSQL文はTABLE2のSQL文を作成してしまう
'//// SQL文(Insert)を確認
Debug.WriteLine(sqlCmdBldr.GetInsertCommand.CommandText)
da.Update(ds, "t_TABLE1") '<---- 自動作成されたSQL文はTABLE2なのでエラーになる
conn.Close()
End Sub
①データセットにTABLE1をセット
②データセットにTABLE2をセット
③TABLE1にレコード追加
④SQL文自動作成
ここでSQL文はTABLE2のSQL文を作成してしまう
仕様というか…(^^;)
[SqlCommandBuilder クラス]
http://www.microsoft.com/japan/msdn/library/ja/cpref/html/frlrfsystemdatasqlclientsqlcommandbuilderclasstopic.asp
>SqlCommandBuilder では、INSERT、UPDATE、または DELETE ステートメントを
>生成するために、 SelectCommand プロパティを通じて必要なメタデータ セットが
>自動的に取得されます。
と書いてある通りです。SelectCommand を設定し直して下さい。
特攻隊長まるるうさん、有難うございました。
早速リンク先の内容を確認しましたら
>相互に関連付けることのできる SqlDataAdapter オブジェクトと
>SqlCommandBuilder オブジェクトは、それぞれ一度に 1 つだけです。
とありました。
私は、1つのデータセットに2つのテーブルをセットしそれぞれを更新
しようと思ったのですが出来ない様です。
コードを見直します