DOBON.NET DOBON.NETプログラミング掲示板過去ログ

SqlDataAdapterの更新について

分類:[.NET]

はじめまして
.netとmsdeで勉強してます。
SqlDataAdapterの更新について教えて下さい。
DATASETのレコードを削除した後に、DataAdapterの更新をしても
エラーもでないけど実際のデータも削除されません。
レコードを追加した時は、問題ありませんでした。


Dim sqlCn As SqlClient.SqlConnection
Dim dtADP As SqlClient.SqlDataAdapter
Dim dtSET As DataSet
Dim dtTbl As DataTable

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

sqlCn = New SqlClient.SqlConnection()
sqlCn.ConnectionString = "data source=******;" & _
"initial catalog=TESTDB;" & _
"user id=*****;" & _
"password=*******;" & _
"persist security info=true;"
dtADP = New SqlClient.SqlDataAdapter("select * from TESTTBL", sqlCn)
dtSET = New DataSet("dsTest")
dtADP.Fill(dtSET, "dtTest")
dtTbl = dtSET.Tables("dtTest")

End Sub

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

Dim sqlCB As SqlClient.SqlCommandBuilder

dtTbl.Rows(0).Delete()
dtSET.AcceptChanges()

sqlCB = New SqlClient.SqlCommandBuilder(dtADP)

Try
dtADP.Update(dtSET, "dtTest")
Catch eDBUpdate As Exception
MessageBox.Show(eDBUpdate.ToString)
Exit Sub
End Try

End Sub
問題点
1:フィールドが認識できずに更新SQLが自動生成されない
2:データ操作後にSqlCommandBuilderを実行しても更新SQLが自動生成されない

以下を変更することで削除可能です。
ただし、SELECTで読み込む情報には、主キーが含まれている必要があります。
1:Form_Load
SqlDataAdapter("select * from TESTTBL", sqlCn)を 「*」ではなく
フィールド名を明示的に表記します。

2:Button1_Click
dtTbl.Rows(0).Delete()の前にsqlCB = New SqlClient.SqlCommandBuilder(dtADP)
を実行することでDeleteに対するDeleteCommandが自動生成されます。

dtSET.AcceptChanges()は不要です。

以上です
fukuさんありがとうございました。
しばらく用事があって見れなかったのですが
今日テストしたら
指示どうりで解決しました。
ありがとうございました。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板