SQL字符串问题 ( 积分: 150 )

  • 主题发起人 主题发起人 guanyue7613
  • 开始时间 开始时间
G

guanyue7613

Unregistered / Unconfirmed
GUEST, unregistred user!
客户端使用TClientDataSet 控件
sql语句如下
CommandText := 'SELECT AB002, AB003 FROM TAB01 WHERE AB001=:AB001';
Params.ParamByName('AB001').AsString := sAB001;
Open;
当字段sAB001 为空字符串 '' 时
执行就会报错,用sqlserver的事件探察器跟踪如下:
declare @P1 int
set @P1=NULL
exec sp_prepexec @P1 output, N'@P1 text', N'SELECT AB002,AB003 FROM TAB01
WHERE AB001=@P1', ''
select @P1
发现@P1 为text 类型
在字段sAB001 不为空 一切正常,跟踪如下:
declare @P1 int
set @P1=NULL
exec sp_prepexec @P1 output, N'@P1 varchar(6) ', N'SELECT AB002,AB003 FROM TAB01
WHERE AB001=@P1', 'TEST01'
select @P1
请各位大侠帮忙给出好的解决方案。
主要时@P1的类型有问题。
 
可能是你的AB001字段在数据库中是INT类型,传入‘’时是会出问题的。
CommandText := 'SELECT AB002, AB003 FROM TAB01 WHERE AB001=:AB001';
if sAB001='' then
sAB001 := '0';
Params.ParamByName('AB001').AsString := sAB001;
Open;
 
在SQL中NULL和空是有区别的
 
AB001字段在数据库中是字符char型的
 
'SELECT AB002, AB003 FROM TAB01 WHERE ISNULL(AB001, '''')=:AB001';
 
我操,这个世界没有天理了~~~~~ MD,老虎不发威,当我是病猫, 先骂人的倒有理了 我可是从来不主动得罪人的 谁要是欺负人,那就不客气了 明天把这个工具开个源,叫大家都来用用 请问你们有什么拿的出手的?自己写的东西? 说出来叫大爷我长长见识? 别不会是一群耍嘴皮子的废物吧? 需要的请关注我的 blog http://hi.baidu.com/earthsearch
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
823
import
I
I
回复
0
查看
1K
import
I
S
回复
0
查看
941
SUNSTONE的Delphi笔记
S
后退
顶部