添加新行后未提取DataTable行

时间:2016-07-26 04:16:21

标签: c++ mysql .net datatable

我添加了一个新行并更新了数据表。该记录已插入表中。但是当我再次填充相同的数据表时,结果是一个空的数据表。我错过了什么吗?我做错什么了吗?我刚刚学会了在.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;
}

2 个答案:

答案 0 :(得分:0)

我已经在c#中测试了你的代码,它运行正常。当您执行以下行时,可能是C ++创建新的数据实例

table1 = gcnew DataTable;

所以不要在代码中使用该行两次。但我不确定C ++

答案 1 :(得分:0)

看来我使用的是过时的MySQL.Data.dll。我检查了修改日期,它是从2008年开始的。

我将MySQL Connector版本更改为最新版本,问题已修复。