从 class 获取价值
Get value from class
所以我有一个 class Take
用于连接到 mysql。在那个 class 中,我有一个方法可以调用查询以从 mysql table.
中获取最后一条记录
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();
}
}
在主要形式中,我调用 class 和那个方法
take.Balance();
我知道,从上面的代码中,我没有得到任何值,但 NULL
,所以我想问我如何从该查询中获取值并将其放入 TextBox
中主窗体?
有两件事需要考虑。一、查询
"SELECT balance FROM history ORDER BY id DESC LIMIT 1"
是一个查询,从某种意义上说,数据库中的一些有用数据应该被 returned,它不应该使用方法 ExecuteNonQuery
来执行,它的目的是 return 受非查询语句影响的行数。其次,Balance
的 return 类型必须更改为 void
以外的其他类型,比如 int
或类似的类型,必须是 return发送给来电者。
我个人认为你应该提高你的编程基础知识。您的示例代码中存在两个大问题:
- 您想获取值,但您的函数是无效的,没有任何东西 return 甚至将值设置为某个变量
- 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();
}
}
一起来看看:
// 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
}
}
}
}
所以我有一个 class Take
用于连接到 mysql。在那个 class 中,我有一个方法可以调用查询以从 mysql table.
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();
}
}
在主要形式中,我调用 class 和那个方法
take.Balance();
我知道,从上面的代码中,我没有得到任何值,但 NULL
,所以我想问我如何从该查询中获取值并将其放入 TextBox
中主窗体?
有两件事需要考虑。一、查询
"SELECT balance FROM history ORDER BY id DESC LIMIT 1"
是一个查询,从某种意义上说,数据库中的一些有用数据应该被 returned,它不应该使用方法 ExecuteNonQuery
来执行,它的目的是 return 受非查询语句影响的行数。其次,Balance
的 return 类型必须更改为 void
以外的其他类型,比如 int
或类似的类型,必须是 return发送给来电者。
我个人认为你应该提高你的编程基础知识。您的示例代码中存在两个大问题:
- 您想获取值,但您的函数是无效的,没有任何东西 return 甚至将值设置为某个变量
- 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();
}
}
一起来看看:
// 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
}
}
}
}