2013-03-06 12 views
5

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

 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(); 

おかげ

答えて

7

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

adapter.Update(myTable)は、更新が完了した後にAcceptChangesと表示されます。

そう...

myTable.Rows[0]["Name"] = "Was Tom"; 
//myTable.AcceptChanges(); 
adapter.Update(myTable); 
+0

@usp:それは愚かではないですが、私はそれの名前が更新befor望ましい何かを示唆して以来、多くの人々が 'AcceptChanges'の意味を誤解していることを前提としています。) –

+0

私はそれを知らなかった場合、あなたが正しいです。しかし、GridViewでDataTableを使っている他のプロジェクトのコードをコピーしたので、私はその行に注意を払っていませんでした。とにかく、助けてくれてありがとう。 – usp

0

私のいくつかのいずれかは、次の解決策を検討する必要があります。他のシナリオでは、人々は異なる解決策を必要とするかもしれない。このように実行時にデバッグするときに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); 

上記のコマンドに従って、データが取得される場合があります。したがって、データテーブルを更新または挿入または削除するコマンドを渡す前に、デバッグを試みてください。

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

foreach(DataRow row in myTable.Rows) 
{ 
    row.SetAdded(); // For Insert Command 
    row.SetModified(); // For Update Command 
} 
関連する問題