mysql 从类中获取值

b5lpy0ml  于 2023-05-16  发布在  Mysql
关注(0)|答案(3)|浏览(147)

所以我有一个类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中?

vsikbqxv

vsikbqxv1#

我个人认为你应该提高你的编程基础知识。您的示例代码中有两个大问题:
1.你想得到值,但是你的函数是空的,没有返回任何东西,甚至把值设置为某个变量

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

os8fio9y2#

让我们看看:

// 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   
      }
    }          
  }
}
gwo2fgha

gwo2fgha3#

有两件事需要考虑。一、查询

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

是一个查询,从某种意义上说,应该返回数据库中的一些有用数据,它不应该用方法ExecuteNonQuery执行,该方法旨在返回受非查询语句影响的行数。其次,Balance的返回类型必须更改为void以外的其他类型,比如int或类似的类型,这些类型必须返回给调用者。

相关问题