2016-07-22 208 views
0

所以我有一個類Take連接到mysql。在那個類中,我有一個方法來調用一個查詢來從MySQL表中獲取最後一條記錄。從類別獲得價值

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(); 
     }   
    } 

在主窗體我打電話是類和方法

take.Balance(); 

我知道,從上面的代碼中,我沒有得到任何價值,但NULL,所以我詢問如何我可以從該查詢中獲取價值並將其放在主表單中的TextBox

+0

你的函數'平衡()'返回'void'(如 '無返回值') 。例如將其改爲字符串,從查詢中讀取數據(必須更改,'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();'但它顯示警告1字段'Budget.Form1.take'永遠不會分配給,並且將始終將其默認值爲空。我應該在我的主窗體中將該值放入文本框中? – Harikeinas

0

有兩件事情需要考慮。首先,查詢

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

是在這個意義上查詢從數據庫中一些有用的數據應該返回,它不應該用的方法ExecuteNonQuery,其目的是恢復受影響的行數執行一個非查詢語句。其次,返回類型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(); 
     }   
    }