2016-07-11 24 views
1

MySQLクエリ結果を文字列変数で取得することは可能ですか?以下のシナリオを考え、MySQLクエリ結果を文字列に格納できるかどうかを教えてください。 MySQLクエリ結果を文字列に格納する方法

Article ID  Article Name Article Quantity 
1    Article1   15 Units 
2    Article2   20 Units 
3    Article3   18 Units 

は、さらに私は1つのループのために用いるもので行にアクセスしようとしています次のように私のデータベースがある(私がやっているかどうかわからない、それを右または間違った方法)。しかし、今私の主な関心事は、MySQLのクエリ結果を文字列にすることです。

private void send_serial_data(string port_name) 
{ 
    MySqlConnection MyConn2 = new MySqlConnection(MyConnection2); 
    SerialPort sp = new SerialPort(port_name, 9600, Parity.None, 8, StopBits.One); 
    MyConn2.Open(); 
    sp.Open(); 
    string variable; //In which I want to store Query 
    int j = 0; //To keep track of null rows 
    { 
     for (int i = 1; i < 20; i++) //I is defined to select new row each time 
     { 
      String Query = ""; 
      Query = "SELECT * FROM warehouse_data.display where Article_ID= i"; 
      MySqlCommand cmd = new MySqlCommand(Query, MyConn2); 
      // variable = (string)command.ExecuteScalar(); Tried this to save query but doesn't work. 
      int a = cmd.ExecuteNonQuery(); 
      if (a == 0) 
      { 
       j++; 
       if (j >= 10) 
       { 
        MessageBox.Show("Data Transmitted Successfully"); 
        break; 
       } 
      } 
      else 
      { 
       sp.Write(variable); //variable in which I want to store MySQL query 
       System.Threading.Thread.Sleep(5000); 
      } 
     } 
    } 
} 

基本的に私はシリアルポート(一度に1つの行)にMySQLデータを送信しようとしています。定義された文字列 '変数'にクエリを保存する方法や、forループを使用して目標を達成する方法や、効果的に行にアクセスする方法についての提案はありますか?あなたの助けは本当に感謝しています。 ありがとうございます

+0

まず、executeReaderを使用するか、データセットを入力します。 –

+0

ここには多くの問題があります。開始するには、ExecuteNonQueryは行を返しません。あなたはExecuteReaderを使う必要があります。一つの行を読み込み、すべてのフィールドを文字列に変換し、それを繰り返し送信します。しかし、これを行う前に、私は変数があなたのクエリをフィルタリングする値ではないので、そのクエリを修正する必要があります – Steve

答えて

2

コードには多くの問題があります。開始するには、ExecuteNonQueryは行を返しません。あなたはExecuteReaderを使う必要があります。一つの行を読み込み、すべてのフィールドを文字列に変換し、それを繰り返し送信します。しかしこれの前に、i変数はクエリをフィルタリングするための値ではないので、そのクエリを修正する必要があります。しかし、実際には、適切なを使用して、IDで20回同じクエリフィルタを呼び出す必要はありませんWHERE条件

private void send_serial_data(string port_name) 
{ 
    using (MySqlConnection MyConn2 = new MySqlConnection(MyConnection2)) 
    using (SerialPort sp = new SerialPort(port_name, 9600, Parity.None, 8, StopBits.One)) 
    { 
     MyConn2.Open(); 
     sp.Open(); 

     // A query that returns all records with an ID lower than 20 
     String Query = @"SELECT * FROM warehouse_data.display where Article_ID < 20"; 
     using (MySqlCommand cmd = new MySqlCommand(Query, MyConn2)) 
     using (MySqlDataReader reader = cmd.ExecuteReader()) 
     { 
      // Read one record 
      while (reader.Read()) 
      { 

       StringBuilder sb = new StringBuilder(); 
       // Accumulate the fields values in the stringbuilder 
       // separating each one with a comma 
       for (int x = 0; x < reader.FieldCount; x++) 
       { 
        if (reader.IsDBNull(x)) 
         sb.Append(",") 
        else 
         sb.Append(reader[x].ToString() + ","); 
       } 
       // trim away the last comma 
       sb.Length--; 

       // And probably you need something to separate a record 
       // from the following one. For example a newline 
       sb.Append(Environment.NewLine); 

       // send it along the wire 
       sp.Write(sb.ToString()); 
      } 
     } 
    } 
} 

注意は、2つの他のものは、私は、カンマでのそれ以外の受信機を各フィールドを分離しているあなたシリアルポートへの書き込みは、テーブルから読み込まれたフィールドを再構築することができません。また、すべての使い捨てオブジェクトは、適切なusingステートメントに囲まなければなりません。

+0

"IsDbNull"を使用している間にエラーが発生しています。つまり、 "MySQLデータリーダーにIsDbNullの定義が含まれていません" – Farrah

+1

MySql.Data.MySqlClientを使用していますが、大文字です。IsDBNull、今修正しています。 – Steve

+0

IsDBNull(リーダー[x])がエラーを「オブジェクト」から「int」に変換できません。 – Farrah

関連する問題