MySqlCommand.ExecuteScaler()未返回任何内容

本文关键字:返回 任何内 ExecuteScaler MySqlCommand | 更新日期: 2023-09-27 17:58:20

当我运行以下代码时:

query = "select count(*) from table where name = '?name'";
MySqlConnection connection = 
  new MySqlConnection(ConfigurationManager.ConnectionStrings["mydb"].ToString());
connection.Open();
MySqlCommand command = new MySqlCommand(query,connection);
command.Parameters.Add("?name", name);
Int32 number = command.ExecuteScalar();

即使转换为整数,number也始终为零

我试过把它转换成int64,没有骰子。我试过command.Prepare()。我尝试过使用Convert.ToInt32()和其他变体。我几乎尝试过所有的事情,包括逐字逐句地引用这句话,但我没有成功。试图将对象强制转换为整数、long和int32,这些似乎都不起作用。这些结果始终为0或导致MySQL错误。

编辑:堆栈溢出不会在代码标签中正确格式化该代码,我向道歉

MySqlCommand.ExecuteScaler()未返回任何内容

原因是参数用单引号括起来,从而使其成为字符串。删除它,它会工作,

query = "select count(*) from table where name = @name";
MySqlConnection connection = new MySqlConnection(ConfigurationManager.ConnectionStrings["mydb"].ToString());
connection.Open();
MySqlCommand command = new MySqlCommand(query,connection);
command.Parameters.Add("@name", name);

为了获得更好的代码,

  • 使用using进行正确的对象处理
  • 使用try-catch块正确处理异常

代码段,

query = "select count(*) from table where name = @name";
string connString =ConfigurationManager.ConnectionStrings["mydb"].ToString();
using(MySqlConnection connection = new MySqlConnection(connString))
{
    using(MySqlCommand command = new MySqlCommand(query, connection))
    {
        command.Parameters.Add("@name", name);
        try
        {
            connection.Open();
            // other codes
        }
        catch(MySqlException ex)
        {
            // do somthing with the exception
            // don't hide it
        }
    }
}