我添加了一个新行并更新了数据表。该记录已插入表中。但是当我再次填充相同的数据表时,结果是一个空的数据表。我错过了什么吗?我做错什么了吗?我刚刚学会了在.net中使用数据库,我不知道如何处理这个问题。
MySqlConnection ^connection;
DataTable ^table1;
MySqlDataAdapter ^adapter1;
MySqlCommandBuilder ^cmb;
private: System::Void opentable(String ^sql){
adapter1 = gcnew MySqlDataAdapter(sql,connection);
cmb = gcnew MySqlCommandBuilder(adapter1);
table1 = gcnew DataTable;
adapter1->Fill(table1);
}
private: System::Void Form1_Load(System::Object^ sender, System::EventArgs^ e) {
connection = gcnew MySqlConnection("XXXXXXXXXX");
connection->Open();
}
private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) {
opentable("SELECT * FROM ms_per WHERE PerCode='001'");
if(table1->Rows->Count==0){ //table1->Rows->Count is 0
DataRow ^newrow = table1->NewRow();
newrow["PerCode"] = "001";
table1->Rows->Add(newrow);
}
adapter1->Update(table1);
opentable("SELECT * FROM ms_perhist");
dataGridView1->DataSource=table1;
//ms_perhist is not an empty table, but after this the DataTable is empty.
我看到我是否可以将这些行包装到一个程序中,以便我可以将它与其他表/查询一起使用:
adapter1 = gcnew MySqlDataAdapter(sql,connection);
cmb = gcnew MySqlCommandBuilder(adapter1);
table1 = gcnew DataTable;
adapter1->Fill(table1);
注1 :我尝试了以下一行。 ms_perhist中的数据显示正确,因此newrow-update行可能与问题有关。
private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) {
opentable("SELECT * FROM ms_per WHERE PerCode='001'");
opentable("SELECT * FROM ms_perhist");
dataGridView1->DataSource=table1;
}
答案 0 :(得分:0)
我已经在c#中测试了你的代码,它运行正常。当您执行以下行时,可能是C ++创建新的数据实例
table1 = gcnew DataTable;
所以不要在代码中使用该行两次。但我不确定C ++
答案 1 :(得分:0)
看来我使用的是过时的MySQL.Data.dll。我检查了修改日期,它是从2008年开始的。
我将MySQL Connector版本更改为最新版本,问题已修复。