读书人

adoquery参数传递机制解决方法

发布时间: 2013-01-05 15:20:40 作者: rapoo

adoquery参数传递机制
一直对adoquery的参数传递机制很疑惑。
比如说sql.text := 'select * from (select * from a left join b on XX=XX where a.XX=:参数1) a';
然后我用Parameters.parambyname('参数1').value := '';传递参数,
接着去open这个query。就会出现错误。跟踪了sqlserver的事件探查器,发现原因是adoquery给sqlserver传的语句中,:参数的类型是text,然后sqlserver就会提示text类型不是直接用"="比较。
再比如我用Parameters.parambyname('参数1').value := '参数';传递参数,
然后执行这个query,这个query传递给sqlserver的语句里面又会把:参数的类型变成varchar(1),这样又把参数给截断了,又得不到我想要的结果了。我给Parameters.parambyname('参数1').datatype赋值也没用,会提示错误。
希望哪位达人能帮忙解决一下
[解决办法]


ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Text := 'select acco_name from (select * from bs_acco_info where acco_id=:e) a';
ADOQuery1.Parameters.ParamByName('e').Value := '0111000005';
ADOQuery1.Open;


exec sp_executesql N'select acco_name from (select * from bs_acco_info where acco_id=@P1) a
',N'@P1 varchar(10)','0111000005'


没出现你说的情况啊,是varchar(10)啊,都是自动匹配的啊

读书人网 >.NET

热点推荐