【问题标题】:C# mysql parameterized queryC# mysql 参数化查询
【发布时间】:2014-03-06 09:28:43
【问题描述】:

我需要从Mysql 检索数据的代码很平静。如果我使用参数化查询,它不采用实际参数值,而是采用参数名称作为值。

错误:必须定义@choise

MySqlConnection connection = new MySqlConnection("");
MySqlDataAdapter mySqlDataAdapter;
DataSet DS;
private string columnValue = xxx;
private string Choise = yyy;
MySqlCommand command = connection.CreateCommand();
command.CommandText = "SELECT * FROM table2 WHERE " + columnValue + " = @choise";
command.Parameters.Add(new MySqlParameter("@choise", Choise));
DS = new DataSet();
connection.Open();
mySqlDataAdapter = new MySqlDataAdapter(command.CommandText, connection);
mySqlDataAdapter.Fill(DS);
connection.Close();

当我运行这个时,我得到如下查询:

SELECT * FROM table2 WHERE xxx = @choise

而不是

SELECT * FROM table2 WHERE xxx = yyy。 问题出在哪里?

我尝试过: command.Parameters.Add(new MySqlParameter("@choise", Choise)); command.Parameters.AddWithValue("@choise", Choise);

当我使用实际变量而不是参数时它工作正常。

【问题讨论】:

    标签: c# mysql


    【解决方案1】:

    我认为您需要在添加参数之前在命令上运行Prepare()

    command.CommandText = "select * from table2 where " + columnValue + " = @choise";
    command.Prepare();
    command.Parameters.AddWithValue("@choise", Choise);
    

    【讨论】:

    • 当我得到致命错误异常时,它说“必须定义参数@choise”,很明显它已经定义了......
    【解决方案2】:

    试试这个:

    command.CommandText = "SELECT * FROM `table2` WHERE `" + columnValue + "` = @choise";
    command.Parameters.AddWithValue("@choise", Choise);
    

    【讨论】:

    • 哦,抱歉,我发布了两行代码,但由于某种原因,第一行丢失了。我刚刚编辑了我的答案。您只需要删除命令中参数周围的单引号。参数对它们的类​​型很聪明,所以它们不需要引号(同样适用于日期参数)。所以第一行是这样的: command.CommandText = "SELECT * FROM table2 WHERE " + columnValue + " = @choise";
    • 它不执行command.Parameters.AddWithValue("@choise", Choise); 或者如果它执行它由于某种原因它不能取值....
    • 改用command.Parameters.AddWithValue("choise", Choise);
    • 我确实删除了我的声明,看起来像你写的,但问题仍然存在.... "@choise is not defined"
    • 要检查的另一件事是 Choise = yyy 的值。什么是yyy?是字符串吗?它有单引号吗?在您像我告诉您的那样删除单引号后,您的代码现在是正确的,因此 Choise 的值一定有问题,将其作为参数 @choise 而不是其值发布。据我所知,只有单引号可以做到这一点。请检查并告诉我。
    猜你喜欢
    • 1970-01-01
    • 2010-10-13
    • 2021-09-29
    • 2016-08-03
    相关资源
    最近更新 更多