日期:2014-05-18  浏览次数:21366 次

SqlParameter 如何进行in查询?
一般来讲
  select * from tablename where fieldname = @paramname
  然后给SqlCommand增加一个SqlParameter说明你要查询的值

对于IN 查询怎么办呢?
我写了如下语句
  command.CommandText = "select * from tablename where fieldname in (@paramname)"
  SqlParameter param = new SqlParameter();
  param.ParameterName = "@paramname";
  param.Value = new object[]{1,2,3,4,5};
  command.Parameters.Add(param);

执行过程中出现以下异常:不存在从对象类型 System.Object[] 到已知的托管提供程序本机类型的映射。

请问,我如何用SqlParameter来执行一个In 查询?

------解决方案--------------------
觉得用in没必要用SqlParameter...

直接生成字符串嵌进去不是更好吗???
------解决方案--------------------
CharIndex


Select * From tablenname where CharIndex(',' + Cast(field_value As Varchar) + ',', ',' + @param + ',') > 0
------解决方案--------------------
command.CommandText = "select * from tablename where CharIndex( ',' + Cast(fieldname As Varchar) + ',', ',' + @param + ',') > 0";
SqlParameter param = new SqlParameter(); 
param.ParameterName = "@paramname"; 
param.Value = "1,2,3,4,5";
command.Parameters.Add(param);
------解决方案--------------------
SqlParameter就是申明sql变量然后附值,你在sql proc里面怎么写就在.net里面怎么写
------解决方案--------------------
从实例中摘一段代码出来。

SqlTemplate rolesTemplate = SqlTemplate.CreateTemplateExpression( "{...}", Array.ConvertAll<string, object>( roles, delegate( string input ) { return input; } ) );

string [] rights = SqlDataProvider.DbUtility.ExecuteSingleColumn<string>( @"SELECT Rights FROM Roles WHERE role IN ( {0} )", rolesTemplate );


DbUtility的源代码在我的Blog就有得下载。