VB.NET2005、SQL Server2000、XPpro
1.DB上の主キーを持たないワークテーブルに対し、SELECTで抽出した結果を取得
2.結果の中からある条件に一致するレコードを更新
というような処理を行いたいのですが、
DataSetを使用した場合、主キーがないテーブルに対しては更新が出来ないというエラーが出てしまいます。
Dim i As Integer
Dim cCmd As System.Data.SqlClient.SqlCommand = New System.Data.SqlClient.SqlCommand("SELECT * FROM worktable",DB)
Dim cAdp As System.Data.SqlClient.SqlDataAdapter = New System.Data.SqlClient.SqlDataAdapter(cCmd)
Dim cBld As System.Data.SqlClient.SqlCommandBuilder = New System.Data.SqlClient.SqlCommandBuilder(cAdp)
Dim ds As DataSet = New DataSet
cAdp.Fill(ds)
Dim cDr() As DataRow = ds.Tables(0).Select()
If ds.Tables(0).Rows.Count <> 0 Then
For i=0 to ds.Tables(0).Rows.Count - 1
If cDr(i)("FIELD1") = "ABC" Then
cDr(i)("FIELD2") = ds.Tables(0).Rows(i)("FIELD2").ToString & i
End If
Next
cAdp.Update(cDr) '※エラー発生
End If
※UpdateComanndの動的SQl生成は、キーである列情報を返さないSelectCommandに対してはサポートされていません。
主キーがないテーブルを更新するには、どのような方法を使えばよいのでしょうか?
CommandBuilder を使った UPDATE 文の自動生成は
できませんので、自分で UPDATE 文を文字列で
作った後、SqlCommand.ExecuteNonQuery メソッドで
UPDATE 文を実行します。
>特攻隊長まるるう様
UPDATE文を作成するやり方にしました。
(もっと簡単なコーディング方法があれば・・・と思ったのですが)
ありがとうございました。