2009-01-13 70 views
0

所以,我有一個方法執行一個參數LIKE查詢。該方法接受搜索參數/值,然後將其添加到準備好查詢的命令中。參數化查詢在執行LIKE條件時會中斷。爲什麼?

它不工作。它應該工作,當我編碼值直接搜索到SQL字符串,無參數化,它確實工作!當我有它作爲參數是不!有任何想法嗎。

這裏有一些(假的,我改了名字)示例代碼。

myDataReader = SQLExecute("SELECT * FROM TableOfAwesomeness WHERE BestTVShow LIKE 'Arrested Development%'") 

會工作。但是

Function MethodOfReturningHorror(ByVal TVShow as String) as SqlDataReader 
{ 
dim command as new SQLCommand 
command.connection = sqlconnection 
command.CommandText = "SELECT * FROM TableOfAwesomeness WHERE BestTVShow LIKE '@tvShow%'" 
command.Parameters.Add("tvShow",TVShow) 

return command.ExecuteReader() 
} 

爲了懶惰/簡潔,我錯過了與問題無關的代碼。因此,忽略返回位和內容,重要的是數據讀取器不包含任何內容,而在第一個示例中則是如此。我相信這是關於LIKE子句的參數化。

謝謝!

回答

6

試試這個:

command.CommandText = "SELECT * FROM TableOfAwesomeness WHERE BestTVShow LIKE @tvShow + '%'" 
+0

乾杯!我會嘗試 – Damien 2009-01-13 22:07:16

3

嘗試追加「%」的參數字符串的結尾,而不是在SQL嵌入它。

0

@tvShow是一個變量,你在字符串中使用它。這將是這在C#中的等價物:

var tvShow = "5th Wheel"; 
var netwokAndShow = "Fox tvShow"; 
Console.WriteLine(networkAndShow); // Prints 'Fox tvShow', not 'Fox 5th Wheel' 

你希望它看起來像:

LIKE @tvShow + '%' 
1

試試這個,以確保你正在檢查對值是VARCHAR值,而不是說整數類型:

command.CommandText = "SELECT * FROM TableOfAwesomeness WHERE BestTVShow LIKE convert(varchar(100), @tvShow) + '%'" 

當T-SQL進行本機類型轉換和字符串連接時,我遇到了一些問題。 (顯然改變「varchar(100)」是什麼在你的實例中工作:你的數據類型,你期望的長度)

+0

如果您設置參數以在客戶端代碼中包含類型信息,這不是問題。 – 2009-01-13 22:09:27

相關問題