2

当我运行以下代码时:

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始终为零,即使转换为 int。

我试过将它转换为int64,没有骰子。我试过了command.Prepare()。我尝试过使用Convert.ToInt32()和其他所有变体。我已经尝试了几乎所有在阳光下的东西,包括逐字引用表明我没有骰子。尝试将对象转换为整数、long、int32,这些似乎都不起作用。这些结果总是 0 或导致 MySQL 错误。

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

4

1 回答 1

5

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

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
        }
    }
}
于 2013-02-08T02:28:57.527 回答