2013-03-06 16 views
5

Próbuję użyć MySqlDatAdapter do aktualizacji tabeli MySql. Ale tabela nigdy się nie aktualizuje !!! Zrobiłem to wcześniej, ale z serwerem SQL. Czy jest jeszcze coś, co jest specyficzne dla MySql, którego brakuje w moim kodzie?Aktualizacja przy użyciu MySqlDataAdapter nie działa

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

Dzięki

Odpowiedz

7

Usuń myTable.AcceptChanges() przed aktualizacją. Niezależnie od tego ustawi wszystkie wiersze od RowState do Unchanged, dlatego DataAdapter nie będzie wiedział, że coś zostało zmienione.

adapter.Update(myTable) sam wywoła AcceptChanges po zakończeniu aktualizacji.

Więc ...

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

@usp: To nie jest głupi, i zakładamy, że wiele osób nie rozumieją znaczenia 'AcceptChanges' ponieważ jest to nazwa sugeruje coś pożądanego befor aktualizacji;) –

+0

masz rację, gdybym nie wiedział. Ale po prostu nie zwracałem uwagi na tę linię, ponieważ skopiowałem kod z innego projektu, który używa DataTable z GridView. W każdym razie, dzięki za pomoc. – usp

0

My ktoś trzeba spojrzeć na następujące rozwiązania; W innym scenariuszu ludzie mogą potrzebować innego rozwiązania. Nawet nie wolno wykonywać żadnych manipulacji z DataTable podczas debugowania w czasie wykonywania takich jak to,

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

Możesz uzyskać dane Według powyższych poleceń. Lepiej spróbuj debugować, zanim przekażesz datatable, aby zaktualizować lub wstawić lub usunąć polecenie.

Jeśli funkcja myTable.GetChanges() zwróci wartość null, możesz ponownie ustawić funkcję SetAdded() lub SetModified() na tabelę DataTable;

foreach(DataRow row in myTable.Rows) 
{ 
    row.SetAdded(); // For Insert Command 
    row.SetModified(); // For Update Command 
} 
Powiązane problemy