读书人

参数化查询时有办法传入NULL吗?解决方

发布时间: 2012-06-02 14:16:14 作者: rapoo

参数化查询时有办法传入NULL吗?
与此帖疑问近似
http://topic.csdn.net/t/20061013/09/5079299.html

如果把select count(*) from Table2 where ColumnA is NULL
换成参数化的select count(*) from Table2 where ColumnA is @para

那么@para怎么赋值才能传入NULL达到直接写IS NULL的效果呢?

——————————————————————————————————————
另外在insert的时候,比如
insert into Table2 (ColumnA,ColumnB) values (@para1,@para2)

使用参数@para1赋值为null,@para2赋值为DBNULL.Value,在数据库中均是存入了NULL。


——-----------------------------------
跟踪SQL SERVER的执行,TextData分别为

插入:
exec sp_executesql N'insert into Table2 (ColumnA,ColumnB) values (@para1,@para2)',N'@para1 nvarchar(50),@para2 nvarchar(50)',@para1=NULL,@para2=NULL

查询:
exec sp_executesql N'select count(*) from Table2 where ColumnA is @para',N'@para nvarchar(50)',@para=NULL

看不出明显不同,求解啊0.0

[解决办法]
有什么不一样啊
都这个样子呢
[解决办法]
is null 不直接写is null,非得传个null,有意义吗,is 后还能跟什么呀,要是给你传个delete你怎么办
[解决办法]


作为参数传入的时候 可以赋值为DBNull.Value(在数据访问层) 这个传入数据库 就是NULL
[解决办法]
ColumnA=@para
[解决办法]

探讨

引用:
作为参数传入的时候 可以赋值为DBNull.Value(在数据访问层) 这个传入数据库 就是NULL

看问题,或者试一下。
插入可以,查询的时候都不正确。

select count(*) from Table2 where ColumnA is @para

@para赋值null或者DBNull.Value都不正确

[解决办法]
这里其实就是一个跨平台映射嘛,ADO.NET会把 null 值映射为 DBNull.Value。
[解决办法]
select count(*) from Table2 where ColumnA is @para
这句话的@para只能是NULL,还传一次有什么意思
不知道传一个等于"NULL"字符串行不行

读书人网 >asp.net

热点推荐