2011-08-24 214 views
2

我在這裏做錯了什麼?將nvarchar值轉換爲數據類型時轉換失敗int

string favorites = "210,213"; 

sqlCommand.CommandText = "select * from clients (nolock) 
    where Deleted = 0 and ClientID in (@favorites)"; 
sqlCommand.Parameters.AddWithValue("@favorites", favorites); 

另一個說明:「210,213」只是一個例子。它可以是任何長度的數字。這就是我使用SQL IN操作符的原因。

謝謝。

+0

難道你不需要'int.Parse'? – V4Vendetta

+0

什麼是ClientID的數據類型? – roymustang86

+0

請使用標籤來分類您的問題。請不要在標題中使用諸如「C#ADO.NET」之類的東西。 –

回答

3

這不是參數的工作原理。您實際上試圖獲得ClientID爲的客戶端等於'210,213'。那麼,這不是一個數字,所以有一個失敗。

如果您的IN列表大小是動態變化的,參數化查詢和IN子句實際上並不是一起實現的。

閱讀這太問題和答案:Parameterize an SQL IN clause

一般情況下,你必須動態地組裝您的SQL查詢,總是在腦海的問題保持像SQL Injection

延伸閱讀:

0

我很確定你將需要用收藏夾字符串生成commandtext。數組中沒有內置的sql類型。您可以通過確保從整數列表中生成收藏夾來保護自己免受sql攻擊。

+0

這不是一個數組。我正在使用SQL IN運算符。 – user390480

+0

理解 - 但我認爲在幕後你的參數必須匹配到sql server中的類型。你要求SQL服務器把你的參數當作一個數組,但是sql server沒有內置數組。假設你在T-SQL中編寫命令,它將如何轉換? @favorites的數據類型是什麼?一個字符串?試試吧 - 它不起作用。我之前在T-SQL中遇到過這個問題,我很確定你的問題和.net一樣。我想上面的答案也是這樣說的。 –

相關問題