2014-03-06 154 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」; –