【问题标题】:Get value from class从类中获取价值
【发布时间】:2016-07-22 08:44:56
【问题描述】:

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

【问题讨论】:

  • 您的函数Balance() 返回一个void(如“无返回值”)。例如将其更改为字符串,从查询中读取数据(您必须更改,ExecuteNonQuery 不返回值),然后使用 return 返回它。

标签: c# mysql sql select connect


【解决方案1】:

就个人而言,我认为你应该提高你的编程基础知识。您的示例代码中有两个大问题:

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

【讨论】:

    【解决方案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   
          }
        }          
      }
    } 
    

    【讨论】:

    • 谢谢!但是现在我想在我的主表单中获取该值,我正在输入take.Balance();,但它显示警告 1 字段“Budget.Form1.take”从未分配给,并且始终具有其默认值 null。我应该在我的主表单中做些什么来将该值放入文本框中?
    【解决方案3】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-08-22
      • 1970-01-01
      • 2021-04-05
      • 2013-04-11
      • 2020-11-07
      • 2018-09-14
      • 2021-11-13
      • 1970-01-01
      相关资源
      最近更新 更多