我有一段代码需要从 Mysql
检索数据。如果我使用参数化查询,它不会采用实际参数值,而是采用参数名称作为值。
Error: @choise must be defined
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);
当我使用实际变量而不是参数时它工作正常。
编辑:
我从以下位置获取 columnvalue
和 Choise
:
columnValue = "`"+DS.Tables[0].Columns[cmb1FilterColumns.SelectedIndex].ToString()+"`";
Choise = "'"+cmb1FilterValues.SelectedItem.ToString()+"'";
最佳答案
在你编辑你的问题后,我想我发现了什么地方不对。
您在 columnValue
和 Choise
中添加了不必要的单引号。你不需要它们。
就像使用它们一样;
columnValue = DS.Tables[0].Columns[cmb1FilterColumns.SelectedIndex].ToString();
Choise = cmb1FilterValues.SelectedItem.ToString();
因为使用单引号,你的命令会是这样的;
SELECT * FROM table2 WHERE 'xxx' = 'yyy'
这似乎不是一个有效的 sql。
关于c# - 定义参数 mysql 字符串时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22223621/