2014-03-06 116 views
0

我有这个代码的和平,我需要从Mysql检索数据。如果我使用参数化查询,它不会取实际的参数值,而是将参数名称作为值。C#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);

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

回答

0

我想你需要添加参数之前运行的命令Prepare()

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

没了,同样的问题... –

+0

当我得到致命错误例外它说:“参数@choise必须定义”,这是显而易见的,它已被定义... –

0

试试这个:

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

我张贴在最初的帖子,我已经尝试过这... –

+0

编辑:nope试过这几秒钟前didn'工作... –

+0

哦,对不起,我发了两行代码,但由于某种原因,第一个代码丢失了。我刚刚编辑了我的答案。您只需要删除命令中围绕参数的单引号。参数对于它们的类型很聪明,所以它们不需要引号(同样适用于日期参数)。所以第一行是这样的:command.CommandText =“SELECT * FROM'table2' WHERE'”+ columnValue +“'= @choise”; –