2011-08-24 172 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一样。我想上面的答案也是这样说的。 –

相关问题