定义mysql字符串参数时出错

时间:2014-03-06 11:47:43

标签: c# mysql

我需要从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);

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

编辑:

我从{<1}}和columnvalue获得:

Choise

4 个答案:

答案 0 :(得分:0)

试试这个:

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();

dAdt.Fill(dSet)
mySqlDataAdapter = new MySqlDataAdapter;
mySqlDataAdapter .SelectCommand = command;
mySqlDataAdapter.Fill(DS);
connection.Close();

答案 1 :(得分:0)

像这样使用

columnValue = DS.Tables[0].Columns[cmb1FilterColumns.SelectedIndex].ToString();
Choise = cmb1FilterValues.SelectedItem.ToString();

似乎不清楚值columnValueChoise的值。如果是双引号中的字符串提及

private string columnValue ="xxx";
private string Choise = "yyy";

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();

答案 2 :(得分:0)

对于某些版本的ADO.NET MYSQL连接器,@符号无法按预期工作。请尝试使用?符号,而不是

new MySqlParameter("?choise", choise);

答案 3 :(得分:0)

编辑完问题后,我想我发现了什么问题。

您将columnValueChoise不必要的单引号。你不需要它们。

就像使用它们一样;

columnValue = DS.Tables[0].Columns[cmb1FilterColumns.SelectedIndex].ToString();
Choise = cmb1FilterValues.SelectedItem.ToString();

因为使用单引号,您的命令就像;

SELECT * FROM table2 WHERE 'xxx' = 'yyy'

这似乎不是一个有效的SQL。