2013-03-06 30 views
5

Tôi đang cố gắng sử dụng MySqlDatAdapter để cập nhật bảng MySql. Nhưng, bảng không bao giờ cập nhật !!! Tôi đã làm điều này trước nhưng với máy chủ SQL. Có bất cứ điều gì khác mà là cụ thể cho MySql mà tôi đang thiếu trong mã của tôi?Cập nhật bằng MySqlDataAdapter không hoạt động

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

Cảm ơn

Trả lời

7

Di myTable.AcceptChanges() trước khi cập nhật. Othwerwise rằng sẽ thiết lập tất cả các hàng RowState đến Unchanged, do đó DataAdapter sẽ không biết rằng một cái gì đó đã được thay đổi.

adapter.Update(myTable) sẽ tự gọi AcceptChanges sau khi cập nhật xong.

Vậy ...

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

@usp: Đó không phải là ngu ngốc, tôi cho rằng nhiều người hiểu sai ý nghĩa của 'AcceptChanges' từ tên của nó cho thấy một cái gì đó mong muốn befor một bản cập nhật;) –

+0

bạn là đúng nếu tôi không biết điều đó. Nhưng tôi đã không chỉ chú ý đến dòng đó khi tôi sao chép mã từ dự án khác đang sử dụng một DataTable với GridView. Dù sao, cảm ơn vì đã giúp. – usp

0

tôi một số một cần phải nhìn vào các giải pháp sau đây; Trong kịch bản khác, mọi người có thể cần giải pháp khác. Ngay cả Không thực hiện bất kỳ thao tác nào với Datatable khi bạn Debug tại Run-time như thế này,

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

Bạn có thể nhận dữ liệu Theo các lệnh trên. Vì vậy, tốt hơn cố gắng để gỡ lỗi trước khi bạn vượt qua các datatable để cập nhật hoặc chèn hoặc xóa lệnh.

Nếu myTable.GetChanges() trả về null thì bạn có thể SetAdded() hoặc SetModified() trở lại DataTable của bạn;

foreach(DataRow row in myTable.Rows) 
{ 
    row.SetAdded(); // For Insert Command 
    row.SetModified(); // For Update Command 
} 
Các vấn đề liên quan