5

MySqlDatAdapterを使用してMySqlテーブルを更新しようとしています。しかし、テーブルは更新されません!!! 以前にこれを行いましたが、SQLサーバーを使用しました。コードに欠けているMySqlに固有の何かが他にありますか?

        DataTable myTable = new DataTable("testtable");

        MySqlConnection mySqlCon = new MySqlConnection(ConfigurationManager.ConnectionStrings["DBConStr"].ConnectionString);

        MySqlCommand mySqlCmd = new MySqlCommand("SELECT * FROM testtable WHERE Name = 'Tom'");
        mySqlCmd.Connection = mySqlCon;

        MySqlDataAdapter adapter = new MySqlDataAdapter(mySqlCmd);
        MySqlCommandBuilder myCB = new MySqlCommandBuilder(adapter);
        adapter.UpdateCommand = myCB.GetUpdateCommand();

        mySqlCon.Open();

        adapter.Fill(myTable);
        myTable.Rows[0]["Name"] = "Was Tom";
        myTable.AcceptChanges();
        adapter.Update(myTable);
        mySqlCon.Close();

ありがとう

4

2 に答える 2

7

myTable.AcceptChanges()更新前に削除してください。そうしないと、すべての行がに設定されるRowStateためUnchanged、DataAdapterは何かが変更されたことを認識しません。

adapter.Update(myTable)AcceptChanges更新が終了した後、自分自身を呼び出します。

それで...

myTable.Rows[0]["Name"] = "Was Tom";
//myTable.AcceptChanges();
adapter.Update(myTable);
于 2013-03-06T22:31:41.957 に答える
1

私の誰かが次の解決策を調べる必要があります。他のシナリオでは、人々は異なる解決策を必要とするかもしれません。このように実行時にデバッグするときは、Datatableで操作を行わないでください。

myTable.GetChanges(); // Return Any of Chnages Made without applying myTable.Accepchanges()
myTable.GetChanges(DataRowState.Added); // Return added rows without applying myTable.Accepchanges()
myTable.GetChanges(DataRowState.Deleted); 
myTable.GetChanges(DataRowState.Detached);
myTable.GetChanges(DataRowState.Modified);
myTable.GetChanges(DataRowState.Unchanged);

上記のコマンドに従ってデータを取得できます。したがって、datatableを渡して更新、挿入、または削除コマンドを実行する前に、デバッグを試してください。

myTable.GetChanges()がnullを返す場合は、SetAdded()またはSetModified()をDataTableに戻すことができます。

foreach(DataRow row in myTable.Rows)
{
  row.SetAdded(); // For Insert Command
  row.SetModified(); // For Update Command
}
于 2013-07-06T17:44:43.250 に答える