少し長くなるかもしれませんが、ご容赦ください。高低を検索しましたが、特定の問題について明確な答えが見つからないようです。
上記の件名で述べているようDataSet
に、データベース内のレコードを取得、編集、挿入、および更新するために s を使用しています。ただし、挿入を除く他のすべての機能は期待どおりに機能します。何が起こるかというと、新しいレコードをデータセットに挿入すると、監視機能を使用してデータセット内の新しいレコードを確認できるため、すべて問題ないように見えます。しかし、編集を終了し、変更を受け入れて更新を行った後、1 つのレコードのみがデータベースに送信されます。以下のコードを参照してください。私もいくつかのバインディングを使用しています。
SetAdapaterCommands
コードは、FillDataSets
、 、SendToDatabase
およびのように異なる関数に分割されますBindToUI
。誰でも何か間違ったことを見ることができますか?
または、データセットの挿入および更新コマンドがどのように機能するかについて、私が見逃しているものはありますか?
このテーブルの前に別の親テーブルを更新していると言うべきかもしれません。それが何か関係があるかどうかはわかりません。
セット アダプタ コマンドの開始
コマンドを選択
#region Select Task Command
queryString = "SELECT value1, value2, value3 FROM Table1;";
taskCommand = new SqlCommand(queryString, connection);
#endregion Select Task Command
更新コマンド
#region Update Task Command
queryString = "UPDATE Table1 SET value1 = @value1, value2 = @value2, value3 = @value3" +
"WHERE value1 = @value1;";
taskUpdateCommand = new SqlCommand(queryString, connection);
taskUpdateCommand.Parameters.Add("@value1", SqlDbType.Char, 10, "value1");
taskUpdateCommand.Parameters.Add("@value2", SqlDbType.Char, 10, "value2");
taskUpdateCommand.Parameters.Add("@value3", SqlDbType.VarChar, 50, "value3");
taskAdapter.UpdateCommand = taskUpdateCommand;
SqlParameter taskParameter = taskUpdateCommand.Parameters.Add("@oldValue1", SqlDbType.Char, 10, "value1");
taskParameter.SourceVersion = DataRowVersion.Original;
#endregion Update Task Command
コマンドを挿入
#region Insert Task Command
queryString = "INSERT INTO Table1 (value1, value2, value3) " +
"VALUES (@value1, @value2, @value3);";
taskInsertCommand = new SqlCommand(queryString, connection);
taskInsertCommand.Parameters.Add("@value1", SqlDbType.Char, 10, "value1");
taskInsertCommand.Parameters.Add("@value2", SqlDbType.Char, 10, "value2");
taskInsertCommand.Parameters.Add("@value3", SqlDbType.VarChar, 50, "value3");
taskAdapter.InsertCommand = taskInsertCommand;
#endregion Insert Task Command
セット アダプタ コマンドの終了
データセットを埋める
private void loadFromDatabase()
{
#region Load Data and From Database
SetAdapterCommands();
#region Load Tasks
try
{
connection.Open();
taskAdapter.SelectCommand = taskCommand;
taskAdapter.Fill(Table1DataSet);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
#endregion Load Tasks
}
変更をデータベースに送信する
private void updateDatabase()
{
try
{
Table1BindingSource.EndEdit();
Table1DataSet.AcceptChanges();
taskAdapter.Update(Table1DataSet);
}
catch(System.Exception ex)
{
MessageBox.Show("Update Failed");
}
}
UI にバインド
textBoxValue1.DataBindings.Add("Text", Table1BindingSource, "value1");
textBoxValue2.DataBindings.Add("Text", Table1BindingSource, "value2");
textBoxValue3.DataBindings.Add("Text", Table1BindingSource, "value3");