首页 新闻 会员 周边

园子里的老哥们,遇到了一个小问题,一直不得解,向老哥们请教请教

0
[已解决问题] 解决于 2016-06-29 14:04

首先我在.net类库里调用SQL里的存储过程,该存储过程有两个UniqueIdentifier类型的参数,如shiftID, classID。在存储过程中是用在where条件后的in 条件中的,也就是说是多个shiftid或classid通过逗号隔开使用,现在我在存储过程中定义shiftID与classID分别为nvarchar(max)。

那么在.net库中调用的时候首先获取该参数:

string shiftid = Tools.ToString(HttpContext.Request.Params["shiftid"]);
string classid = Tools.ToString(HttpContext.Request.Params["ClassId"]);

然后加入到SQL参数集合中:

     paraList.Add(DBHelper.GetParameter("@ShiftID", SqlDbType.NVarChar, 4000, (shiftid != string.Empty ?(object)Tools.QuoteSplitString(shiftid):DBNull.Value)));

 paraList.Add(DBHelper.GetParameter("@ClassID", SqlDbType.NVarChar, 4000, (classid != string.Empty ? (Object)Tools.QuoteSplitString(classid) : DBNull.Value)));

这里的Tools.QuoteSplitString方法是一个公共方法,它主要把如2d01aaab-4c66-475f-b8c3-8f9da4d648cf,b0a067e3-dc45-442a-8e96-dc9d135f970f 转换成“‘2d01aaab-4c66-475f-b8c3-8f9da4d648cf’,‘b0a067e3-dc45-442a-8e96-dc9d135f970f’”这种字符串类型,那么现在cmd执行SQL的时候报将字符串转换UniqueIdentifier类型失败,这是SQL中报的错。

总体来说就是:使用,NET库,调用SQl存储过程中如何把用逗号隔开的字符串参数传到是nvarchar类型的SQL语句中

奇妙能力的主页 奇妙能力 | 菜鸟二级 | 园豆:253
提问于:2016-06-28 18:22
< >
分享
最佳答案
0

存储过程定义的参数是什么,外面的AddParameter对面的SQLDbType就要和它一样。

奖励园豆:5
路过秋天 | 老鸟四级 |园豆:4787 | 2016-06-28 20:18

恩,我明白你的意思, 但是还是没有得到解决, 可能是我描述问题不够清楚,

奇妙能力 | 园豆:253 (菜鸟二级) | 2016-06-29 14:04

@奇妙能力: 如果还没解决,就换cyq.data orm处理吧

路过秋天 | 园豆:4787 (老鸟四级) | 2016-07-13 10:16
其他回答(1)
0

可以使用数据库函数处理分割参数,比如:
create FUNCTION [dbo].[func_split](@str nvarchar(4000),@separtor varchar(10))
returns @temp table([row] [int] IDENTITY(1,1) NOT NULL,valuess nvarchar(4000))
as
begin
declare @i int
set @str=rtrim(ltrim(@str))
set @i=charindex(@separtor,@str)
while @i>=1
begin
insert @temp values(left(@str,@i-1))
set @str=substring(@str,@i+1,len(@str)-@i)
set @i=charindex(@separtor,@str)
end
if @str<>''
insert @temp values(@str)

--测试
select * from dbo.func_split('1,2,3,4,5,7', ',')
return
end

F12-爱码士 | 园豆:254 (菜鸟二级) | 2020-10-28 14:55
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册