代码如下:
private void GetData(string itm)
{
SqlCommand tmpSQL = new SqlCommand("select ixkit,ixitm from F01002 where ixkit in ( @ixkit )", sqlconstr);
tmpSQL.Parameters.Add("@ixkit", SqlDbType.Decimal).Value = @itm;
SqlDataReader sdr = tmpSQL.ExecuteReader();
while(sdr.Read()){ ...}
}问题:
说明:字段IXKIT是SqlDbType.Decimal类型字段。
另:请不要告诉我用"select ixkit,ixitm from F01002 where ixkit in (" + itm + ")"的方法,这个能行,我是知道的,关键是为什么用以下方法就不行了?
当调用此过程时,如果参数是单一值不会有问题,否则部有问题,如下:
GetData("1") ---- OK
GetData("1,2,3") --- Error
private void GetData(string itm)
{
SqlCommand tmpSQL = new SqlCommand("select ixkit,ixitm from F01002 where ixkit in ( @ixkit )", sqlconstr);
tmpSQL.Parameters.Add("@ixkit", SqlDbType.Decimal).Value = @itm;
SqlDataReader sdr = tmpSQL.ExecuteReader();
while(sdr.Read()){ ...}
}问题:
说明:字段IXKIT是SqlDbType.Decimal类型字段。
另:请不要告诉我用"select ixkit,ixitm from F01002 where ixkit in (" + itm + ")"的方法,这个能行,我是知道的,关键是为什么用以下方法就不行了?
当调用此过程时,如果参数是单一值不会有问题,否则部有问题,如下:
GetData("1") ---- OK
GetData("1,2,3") --- Error
這是一個字符串,sql server 會把@ixkit 也作為一個字符串,面不是參數一定要用
"select ixkit,ixitm from F01002 where ixkit in (" + @ixkit + ")"
把@ixkit的值替換出來才行.
nvrchar类型的不行吗?
"select ixkit,ixitm from F01002 where ixkit in (" + itm + ")"
这样其他是组成一条正确的SQL语句后在执行的。而你使用参数
"select ixkit,ixitm from F01002 where ixkit in ( @ixkit )"
这里的 @ixkit 是当前整个对象来看待,而不是像前面一种方法一样直接把 @ixkit 替换掉。
select @i=count(*) from Dv_Board where ParentID = ((select ParentID from Dv_Board where BoardID = @board_id))
if(@i>1)
begin
delete from Dv_Board WHERE BoardID = @board_id
end
else
begin
delete from Dv_Board WHERE BoardID = (select ParentID from Dv_Board where BoardID =@board_id)
delete from Dv_Board WHERE BoardID = @board_id
end";
return DataAccess.DeleteData1(sql,CommandType.Text,out msg,DataAccess.GetParameter("@board_id",board_id));
我这么用时没有错误
tmpSQL是DECIMAL类型,参数"1,2,3"呢好像不是DECIMAL类型吧
如果是decimal的话那么就构造成in(2,3,5)这个格式,或者是in('2','3','5')这个格式。如果做到通用,最好构造成后一种做法。
因为Sql Server中的int,bit,char,varchar,decimal,float,..都可以接受'x'这种格式。
{
SqlCommand tmpSQL = new SqlCommand("select ixkit,ixitm from F01002 where ixkit in ( @ixkit )", sqlconstr);
tmpSQL.Parameters.Add(@ixkit, SqlDbType.Decimal).Value = @itm;
SqlDataReader sdr = tmpSQL.ExecuteReader();
while(sdr.Read()){ ...}
}試試這樣
int len=itm.Length;
SqlCommand tmpSQL = new SqlCommand("select ixkit,ixitm from F01002 where ixkit in ( @ixkit )", sqlconstr);
tmpSQL.Parameters.Add("@ixkit", SqlDbType.Char,len).Value = @itm;
SqlDataReader sdr = tmpSQL.ExecuteReader();
while(sdr.Read()){ ...}
或者
itm=itm.Replace("," , "','");
itm="'" + itm + "'";
int len=itm.Length;
SqlCommand tmpSQL = new SqlCommand("select ixkit,ixitm from F01002 where ixkit in ( @ixkit )", sqlconstr);
tmpSQL.Parameters.Add("@ixkit", SqlDbType.Char,len).Value = @itm;
SqlDataReader sdr = tmpSQL.ExecuteReader();
while(sdr.Read()){ ...}
也很遗憾还是没有找到真正解决办法。
谁能告诉我用[参数]的方式,将不连续的值传入SqlCommand呢?
也就是说怎样用[参数]的方式,实现SQL的Where in功能呢?
dbUtility.ExecuteData( "select ixkit,ixitm from F01002 where ixkit in ( {...} )", 1, 2, 3 );http://community.csdn.net/Expert/topic/4583/4583043.xml?temp=.7616236