2016-07-22 96 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(); 
     }   
    }