2017-05-11 24 views
0

SQLデータベースをC++のデータテーブルにロードしようとしていましたが、それは働きたいと思わない。 DataReaderが動作するので、接続は機能しています。ここに私のコードがありますSqlDataAdapterがデータテーブルをロードしていません - C++

void importDatabase() { 
    SqlConnection con; 
    SqlDataAdapter^ da; 
    SqlCommand cmd; 
    DataTable^ dt; 
    int count = 1; 
    try { 
     con.ConnectionString = "Data Source=MYNAME\\SQLEXPRESS;Initial Catalog=VinylRecords;Integrated Security=True"; 
     cmd.CommandText = "SELECT * FROM Records"; 
     cmd.Connection = %con; 
     con.Open(); 
     da = gcnew SqlDataAdapter(%cmd); 
     dt = gcnew DataTable("Records"); 
     Console::Write(da->ToString()); 
     da->Fill(dt); 

     for (int i = 0; i < dt->Rows->Count - 1; i++) { 
      String^ value_string; 
      value_string = dt->Rows[i]->ToString(); 
      Console::WriteLine(dt->Rows[i]->ToString()); 

      count++; 
     } 

     cout << "There are " << count << " many records"; 
    } 
    catch (Exception^ ex) { 
     Console::WriteLine(ex->ToString()); 
    } 
} 

私はここに投稿するソース名を少し変更しましたが、最初の部分のみを書きました。 私のコードで何が問題になっていますか?

+0

どのように動作しませんか?例外がスローされた場合は、例外の詳細を提供してください。空の場合は、そのクエリが実際に行を返すかどうかを確認できますか? – MBurnham

+0

問題は、テーブルを印刷するときに出力されることです。System.Data.DataRow;とSystem.Data.SqlClient.SqlDataAdapterSystem.Data.DataRowアダプター –

答えて

0

だから、問題はここにある:

dt->Rows[i]->ToString() 

行[i]をRowオブジェクトです。そして、RowクラスのToString()メソッドは、常にあなたが見ている完全修飾されたtypenameを出力します。これは技術的にはうまくいきます。何か役に立つものを得るために必要なことは、その行の特定の列にアクセスして価値を得、それを出力する必要があることです。線に沿って

何か:

foreach (DataRow dr in dt.Rows) 
{ 
    Console.Write(dr.Field<int>("ColumnOne")); 
    Console.Write(" | "); 
    Console.WriteLine(dr.Field<string>("ColumnTwo")); 
} 

私はC++ \ CLIを使用した場合のDataTableの内部で特定のセルにアクセスするための構文に完全にわかりません。だから私は、Rowの列の中の情報の代わりに、管理された型名(例えば、 "System.Data.DataRow")の出力を取得している理由を説明するためにC#を提供しました。

また、この質問に「mysql」というタグが付いていますが、ADO.NETのSystem.Data.SqlClient名前空間を使用しています。 SqlDataReaderクラスとSqlDataAdapterクラスは、TSQL(MicrosoftのSQL Serverデータベース)でのみ動作します。実際にmysqlデータベースに接続する場合は、System.Data.OdbcDataAdapterクラスを使用します。ここでもう少し読むことができます:https://msdn.microsoft.com/en-us/library/ms254931.aspx

+0

ありがとう、 "行"の下に "項目"のプロンプトがありません。ヘッダーがないのですか?私はヘッダーを持っている:

+0

@ JessicaPコードサンプルを、より適切なものに更新しました。これが役に立ったら教えてください。 – MBurnham

+0

私はコードにいくつかの誤りがあります。最初のループのdtは、 "見かけの呼び出しの括弧に先行する式は、(ポインタへの)関数型を持たなければならない"と言っている2番目のループはCount()にエラーがあり、System ::アレイ' –

関連する問題