SqlCommandBuilderクラスによる自動生成のエラー

解決


sinya  2005-10-15 11:10:47  No: 126268  IP: [192.*.*.*]

お世話になります
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文を作成してしまう

編集 削除
特攻隊長まるるう  2005-10-17 18:33:26  No: 126269  IP: [192.*.*.*]

仕様というか…(^^;)
[SqlCommandBuilder クラス]
http://www.microsoft.com/japan/msdn/library/ja/cpref/html/frlrfsystemdatasqlclientsqlcommandbuilderclasstopic.asp
>SqlCommandBuilder では、INSERT、UPDATE、または DELETE ステートメントを
>生成するために、 SelectCommand プロパティを通じて必要なメタデータ セットが
>自動的に取得されます。
と書いてある通りです。SelectCommand を設定し直して下さい。

編集 削除
sinya  2005-10-19 09:49:28  No: 126270  IP: [192.*.*.*]

特攻隊長まるるうさん、有難うございました。

早速リンク先の内容を確認しましたら
>相互に関連付けることのできる SqlDataAdapter オブジェクトと
>SqlCommandBuilder オブジェクトは、それぞれ一度に 1 つだけです。
とありました。

私は、1つのデータセットに2つのテーブルをセットしそれぞれを更新
しようと思ったのですが出来ない様です。

コードを見直します

編集 削除