3

dataAdapter を初期化しました:

string sql = "SELECT * From localitati";
da1 = new System.Data.SqlClient.SqlDataAdapter(sql, con);
da1.Fill(ds1, "localitati");

そして、これはうまく機能します。問題は、レコードを削除してデータベースを更新しようとしたときです。私はそのようにデータセットからレコードを削除します:

ds1.Tables["localitati"].Rows.Remove(dRow);

そして、これも問題なく動作します(検証済み)。

問題は、DataAdapter を更新するときに、DataBase が変更されないことです。

con.Open()
da1.Update(ds1, "localitati");
con.Close();

何が問題なのですか?

4

5 に答える 5

13

私にとってそれを修正したのは、 のメソッドの代わりに のDeleteメソッドを呼び出すことでした。 DataRowRemoveDataTable

ds.Tables["localitati"].Rows.Find(primaryKeyValue).Delete();

または単に

dr.Delete();
于 2012-08-21T00:18:10.263 に答える
1

da1.DeleteCommand を設定したことを確認する必要があります。これは、削除された DataTable の各行に対して実行されるコマンドです。たとえば、この MSDN リファレンスを参照してください。

于 2010-11-29T08:58:06.813 に答える
0

データベースが例外をスローしていないと仮定して、以下のコードを試してください。

con.Open() 
da1.Update(ds1.Tables["localitati"].GetChanges()); 
con.Close(); 
于 2010-11-29T08:43:56.557 に答える
0

投稿したコードでは、DataAdapter に対して SelectCommand のみが設定されています。次のコードを使用して、da1 の Insert、Update、および Delete コマンドを生成できます。

string sql = "SELECT * From localitati";
da1 = new SqlDataAdapter(sql, con);
SqlCommandBuilder builder = new SqlCommandBuilder(da1);
builder.QuotePrefix = "[";
builder.QuoteSuffix = "]";
da1.Fill(ds1, "localitati");

ただし、CommandBuilder は、比較的単純なシナリオ (詳細)でのみ使用する必要があります。カスタムコマンドテキスト/ストアドプロシージャに依存する独自のコマンドを作成することをお勧めします。

それでもうまくいかない場合は、サーバー上で SQL Server プロファイラーを起動して、Update メソッドの実行時にどのコマンドがデータベースに到達したかを追跡できます。

于 2010-11-29T09:13:10.323 に答える