2016-07-11 4 views
0

Visual Studio 2015のプログラムで、MySQLのテーブルからデータを取得しています。私はSQLに慣れていないので、これを間違った方法で一緒に行っているかもしれません。私が必要とするのは、基本的にMySQLからC#アプリケーションにテーブルを模倣することです。 DataSet4という名前の新しいデータセットを作成しました。その中にDataTable1というテーブルがあります。このテーブルにはIDと名前の2つの列があります。今、私のコード(以下に示す)は、テーブルから最初の行だけを取り出します。 mySQLからすべての行を引き出すためにforeachループを追加するにはどうすればよいですか?私はこれを明確に述べたことを願っています。もしそうでなければ、私が試して説明できることをします。これよりもはるかに多くのことがありますが、私はそこから理解できるように感じます。私はテーブルを直接引っ張るデータセットを設定しようとしましたが、Visual Studioがフリーズしていました。Visual Studio 2015のdataTableをデータベースのテーブルに入れます。

private void button7_Click(object sender, EventArgs e) 
    { 
     try 
     { 
      cnC03.Open(); 
      s = "SELECT * FROM c03.tbl_kit t;"; 
      mcd = new MySqlCommand(s, cnC03); 
      mdr = mcd.ExecuteReader(); 


      if (mdr.Read()) 
      { 
       DataRow newDataRow = dataSet4.Tables["DataTable1"].NewRow(); 
       newDataRow["ID"] = mdr.GetString("ID"); 
       newDataRow["Name"] = mdr.GetString("Name"); 

       dataSet4.Tables["DataTable1"].Rows.Add(newDataRow); 
      } 
      else 
      { 
       MessageBox.Show("No Data"); 
      } 
     } 
     catch (Exception ex) 
     { 
      MessageBox.Show(ex.Message); 
     } 
     finally 
     { 
      mdr.Close(); 
      cnC03.Close(); 
     } 
    } 

新コード:

private void button7_Click(object sender, EventArgs e) 
    { 
     try 
     { 
      s = "SELECT ID, Name FROM c03.tbl_kit"; 
      using (cnC03) 
      using (MySqlCommand mcd2 = new MySqlCommand(s, cnC03)) 
      { 
       cnC03.Open(); 
       using (MySqlDataReader mdr = mcd2.ExecuteReader()) 
       { 
        DataTable dt = new DataTable("DataTable1"); 
        dt.Load(mdr); 
        dataSet4.Tables.Add(dt); 


       } 
      } 
     } 
     catch (Exception ex) 
     { 
      MessageBox.Show(ex.Message); 
     } 
    } 
+0

http://www.aspsnippets.com/Articles/Fill-Populate-DataTable-using-MySqlDataAdapter-in-C-and-VBNet.aspx –

+0

どのように多くのようなものを書きます行はあなたが期待している?また、リソースを 'using'ブロックで囲みます。 – Drew

+0

私はこれを複数のテーブルに対して行います。たとえば、この表には3行しかありませんが、他の表には20,000プラス行があります。使用ブロックに慣れていない。 –

答えて

1

あなたはDataTableのクエリによって返されるすべてのデータをロードする必要がある場合、あなたは

s = "SELECT ID, Name FROM c03.tbl_kit"; 
mcd = new MySqlCommand(s, cnC03); 
mdr = mcd.ExecuteReader(); 
DataTable dt = new DataTable(); 
dt.Load(mdr); 

MSDN上を参照して多くのことをあなたのコードを短くすることができDataTable.Load

フィールドが2つだけ必要な場合は、正確な列の 'クエリテキストへの出力に必要な名前。

コードに潜在的な問題があります。 MySqlConnectionのローカル変数がありません。これは、接続が使い捨てオブジェクトであり、できるだけ早く作成、使用、および廃棄する必要があるため、大きな問題となります。

私はこの

private void button7_Click(object sender, EventArgs e) 
{ 
    try 
    { 
     s = "SELECT ID, Name FROM c03.tbl_kit"; 
     using(MySqlConnection cnn = new MySqlConnection(connectionstring)) 
     using(MySqlCommand mcd = new MySqlCommand(s, cnn)) 
     { 
      cnC03.Open(); 
      using(MySqlDataReader mdr = mcd.ExecuteReader()) 
      { 
       DataTable dt = new DataTable("DataTable1"); 
       dt.Load(mdr);    
       //.... use your table .... 
       //.... or add it to the global dataset 
       //.... of course this means that you haven't done it manually before 
       dataSet4.Tables.Add(dt); 


      } 
     } 
    } 
    catch (Exception ex) 
    { 
     MessageBox.Show(ex.Message); 
    } 

} 
+0

私は私のtryコードを以下に変更しましたが、それでも私は1行しか与えませんでした。 try { cnC03.Open(); s = "SELECT * FROM c03.tbl_kit t;"; mcd = new MySqlCommand(s、cnC03); mdr = mcd.ExecuteReader(); DataTable dt =新しいDataTable(); dt.Load(mdr); } –

+0

申し訳ありませんが、スペースを分ける方法を理解できませんでした。 –

+0

DataTable.Load(...)は、MySqlDataReaderから返されたすべてをロードします。 1行だけの場合、クエリは1行を返します。 (コメント内のコードは正しくフォーマットできません) – Steve

関連する問題