首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

adoquery联接sqlserver查询出错

2012-09-04 
adoquery连接sqlserver查询出错用adoquery连接sqlserver查询,当查询语句比较复杂的时候,对参数传,就会出

adoquery连接sqlserver查询出错
用adoquery连接sqlserver查询,当查询语句比较复杂的时候,对参数传'',就会出现错误。adoquery会自动把参数转换成text类型,其实是varchar类型,但是由于语句比较复杂,所以adoquery判断不出参数是什么类型了.直接在查询分析器里执行是好的。


sql:

SQL code
CREATE TABLE [dbo].[test] (    [name] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,    [number] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ) ON [PRIMARY]


delphi代码:
Delphi(Pascal) code
with ADOQuery1 dobegin  close;  sql.text := 'select * from test a left join (select name from test where name=:name) b on a.name=b.name';  Parameters[0].value := '';  Open;end;



执行之后用sqlserver的事件探查器跟踪得到的语句是这样的:
SQL code
exec sp_executesql N'select * from test a left join (select name from test where name=@P1) b on a.name=b.name', N'@P1 text', ''



提示:

不能比较或排序 text、ntext 和 image 数据类型,除非使用 IS NULL 或 LIKE 运算符。




[解决办法]
你的字段什么类型,提示你那几种类型不能这么用
[解决办法]
1.自用數據表字段最好不用這個name,如果要用請加上[],
with ADOQuery1 do
begin
close;
sql.text := 'select * from test a left join (select [name] from test where [name]=:name) b on a.[name]=b.[name]';
Parameters[0].value := '';
Open;
end;
2.動態加入語句後,先建立對應類型的參數,然後再給參數賦值。


[解决办法]
Parameters[0].value := QuotedStr('')
[解决办法]
不用参数模式,用变量拼接

热点排行