2016-07-22 16 views
0

私はmysqlに接続するためのクラスTakeを持っています。そのクラスでは、mysqlテーブルから最後のレコードを取得するためにクエリを呼び出すメソッドがあります。私は上記のコードから、私は任意の値ではなく、NULLを取得しないことを、知っているので、私はどのように求めています、そのクラスとそのメソッドクラスからの値を取得

take.Balance(); 

を呼んでいるメインフォームで

public void Balance() 
    { 
     string query = "SELECT balance FROM history ORDER BY id DESC LIMIT 1 "; 
     if (this.OpenConnection() == true) 
     { 
      MySqlCommand cmd = new MySqlCommand(query, connection); 
      cmd.ExecuteNonQuery(); 
     }   
    } 

私はそのクエリから価値を得て、それをメインフォームのTextBoxに入れることができますか?

+0

あなたの関数 'バランス()'( '・ノーリターン値' のように) 'void'を返します。 。これを例えばstringに変更し、クエリからデータを読み込みます(変更する必要があります.' ExecuteNonQuery'は値を返しません)、 'return'を使って返します。 – Bobby

答えて

2

はのは、見てみましょう:

// You probably want to return value: decimal, not void 
public decimal Balance() { 
    // Make sql readable 
    string query = 
    @"SELECT balance 
     FROM history 
    ORDER BY id DESC 
     LIMIT 1 "; 

    // do not cache connection, but create a new one instead 
    using (MySqlConnection conn = new MySqlConnection(connectionStringHere)) { 
    conn.Open(); 

    // wrap IDisposable into using 
    using (MySqlCommand cmd = new MySqlCommand(query, conn)) { 
     // you want to return values: ExecuteReader (or ExecuteScalar) 
     // instead of ExecuteNonQuery 
     using (var reader = cmd.ExecuteReader()) { 
     if (reader.Read()) 
      return Convert.ToDecimal(reader.GetValue(0)); 
     else 
      return 0m; // cursor is empty, let's return 0 
     } 
    }   
    } 
} 
+0

ありがとう!しかし、今私は 'take.Balance();'とタイプしていますが、Warning 1 Field 'Budget.Form1.take'は決して割り当てられておらず、デフォルト値は常にnullになります。その値をテキストボックスに入れるために私のメインフォームで何をすべきですか? – Harikeinas

0

考慮すべき点が2つあります。まず、クエリ

"SELECT balance FROM history ORDER BY id DESC LIMIT 1" 

データベースからいくつかの有用なデータが返さなければならないという意味でのクエリでは、影響を受ける行の数を返すように意図されている方法ExecuteNonQuery、で実行されるべきではありませんクエリ以外のステートメント第2に、Balanceの返品タイプは、void、たとえばintなどの別のタイプに変更する必要があります。これは呼び出し元に返す必要があります。

4

個人的には、プログラミングの基本的な知識を向上させる必要があります。

  1. あなたが値を取得したいが、あなたの機能は無効であり、さらにいくつかの変数
  2. は、ExecuteNonQueryに値を設定し、何も返さない、あなたの場合はされていません:あなたのコード例では二つの大きな問題があります。たとえば、

public string Balance() 
    { 
     string query = "SELECT balance FROM history ORDER BY id DESC LIMIT 1 "; 
     if (this.OpenConnection() == true) 
     { 
      MySqlCommand cmd = new MySqlCommand(query, connection); 
      return cmd.ExecuteScalar(); 
     }   
    } 
関連する問題