我需要从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
答案 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();
似乎不清楚值columnValue
和Choise
的值。如果是双引号中的字符串提及
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)
编辑完问题后,我想我发现了什么问题。
您将columnValue
和Choise
不必要的单引号。你不需要它们。
就像使用它们一样;
columnValue = DS.Tables[0].Columns[cmb1FilterColumns.SelectedIndex].ToString();
Choise = cmb1FilterValues.SelectedItem.ToString();
因为使用单引号,您的命令就像;
SELECT * FROM table2 WHERE 'xxx' = 'yyy'
这似乎不是一个有效的SQL。