none
データベースを更新する際のcommandbuilderのSQR自動生成について RRS feed

  • 質問

  • 使用環境[Visualbasic2005,SQLserver]
    vb初心者です。
    sekisansystem.mdfに資材マスタというテーブルを構成しており、フォームのデータグリッドビューにデータを取得・追加・削除・更新をかけたい。テーブル定義は、IDと資材名の2列のみです。取得及び追加は簡単に出来たのですが、その他2つの事項についてはcommandbuilderにて自動生成にて対応できると聞いたのですが、
    →「updatecommandの動的SQL生成は、キーである列情報を返さないselectcommandに対してはサポートされていません。」
    とエラーが出ます・・・。

    自分が思うに、多分sqlcommandに更新等のSQL文をコーディングしなきゃならないのでは?と薄々感じてはいるのですが、よく分かりません。

    例えば更新をする場合の文法を教えていただけないでしょうか?

    ちなみにコードは下記のとおりです。よろしくお願いいたします。

     


    Imports System.Data
    Imports System.Data.SqlClient

    Public Class Form1
        Dim sqlDa As SqlDataAdapter

        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            データ更新()
        End Sub

        Sub データ更新()

            Try
                Dim conn As New SqlConnection _
                   ("Data Source=.\SQLEXPRESS;" _
                  + "AttachDbFilename=|DataDirectory|\sekisansystem.mdf;" _
                  + "Integrated Security=True;User Instance=True")
                Dim sqlCm As SqlCommand = conn.CreateCommand
                sqlDa = New SqlDataAdapter(sqlCm)
                Dim sqlBd As New SqlCommandBuilder(sqlDa)
                Dim dtTable As New DataTable

                sqlCm.CommandText = "SELECT * FROM 資材マスタ"

                sqlDa.Fill(dtTable)

                DataGridView1.DataSource = dtTable

                '▼後処理
                dtTable.Dispose()


            Catch ex As Exception
                MessageBox.Show("更新に失敗しました。" + vbCr + ex.Message)
            End Try

        End Sub

        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            Try
                sqlDa.Update(datagridview1.DataSource)
                MessageBox.Show("更新に成功しました。")
            Catch ex As Exception
                MessageBox.Show("更新に失敗しました。" + vbCr + ex.Message)
            End Try
        End Sub
    End Class

    2007年2月21日 14:45

すべての返信

  • > →「updatecommandの動的SQL生成は、キーである列情報を返さないselectcommandに対してはサポートされていません。」
    > とエラーが出ます・・・。

    データベース内のテーブルの定義でキーが設定されてないんじゃないでしょうか。
    IDをキーとして設定してあげればいいような。

    2007年2月21日 15:52
  • 返信有り難うございます^^

    テーブルのプライマリキーの設定済みなんです・・・。

    ほかに考えられることはないでしょうか?

    マイクロソフトサポートオンラインで見たのですが、

    CustomersDataSet.Tables("Customers").Rows(0)("CustName") = "Jack"

    的なコードが必要なんでしょうか?

    2007年2月21日 23:32
  • dtTable.Dispose()はまずくないですか?

     

    すみません。適当なこと言いました。

    2007年2月22日 4:59