2016-07-26 9 views
0

新しい行が追加され、データテーブルが更新されました。レコードがテーブルに挿入されました。しかし、同じデータテーブルをもう一度塗りつぶすと、結果は空のデータテーブルになります。何か不足していますか?私は間違ったことをしましたか?私は最近、.netでデータベースを使用することについて学びましたが、私はこの問題をどうするか分かりません。私は他のテーブル/クエリでそれを使用することができますので、私は1つのプロシージャにこれらの行を折り返すことができるかどう新しい行を追加した後にDataTableの行がフェッチされない

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

まだrowcount Redを探していますか? Visual C++ 2008 Express Editionまたは2015 OK? – Drew

+0

ああ、そうです。私は誰も私の問題を理解していないのだろうかと思っていた。 問題はもう行数ではありません。これは空のデータテーブルです。 –

+0

よく見ていきます。使用している環境とは異なる環境になっている可能性があります。 – Drew

答えて

0

私は古いMySQL.Data.dllを使用していたようです。

MySQL Connectorのバージョンを最新バージョンに変更したため、問題は解決しました。

0

あなたのコードはC#でテストされていますが、うまくいきます。次の行を実行しているときに新しいdatableインスタンスを作成している可能性があります。

table1 = gcnew DataTable; 

コードでその行を2回使用しないでください。しかし、私はC++については分かりません

+0

'adapter1-> Fill(table1)'の上にある4行をプロシージャにラップすることを考えていますので、他のテーブル/クエリと併用することができます。しかし、 'table1 = gcnew DataTable'がなければ、データ構造は更新されません –

関連する問題