关于SQL Server带参数查询的一个奇怪问题,请高手们积极帮助。(100分)

  • 主题发起人 主题发起人 yanghaijun
  • 开始时间 开始时间
Y

yanghaijun

Unregistered / Unconfirmed
GUEST, unregistred user!
...
var
p:TParam;
begin
ClientDataSet2.Close;
ClientDataSet2.CommandText:='select A.部门,A.用户姓名 责任监督员,B.监督登记号
,B.工程名称 from 用户控制信息表 A,工程总信息表 B where
A.用户编号=B.责任监督员 and A.部门 LIKE :bm';
ClientDataSet2.Params.Clear;
p:=TParam.Create(nil);
P.Name:='bm';
p.DataType:=ftString;
P.Value:='四室';
ClientDataSet2.Params.AddParam(p);
ClientDataSet2.Open;
end;
我用的是SQL Server,建立一个三层数据库程序,应用程序服务器用的是ADO,本段代码
目的是想检索所有'四室'这个部门的工程信息,结果,什么都没检索到,用SQL Server
Profiler查看,有如下信息,最后为'四?',而原本应为'四室'的,说明未正确传到
SQL Server上:
exec sp_cursoropen @P1 output, N'select A.部门,A.用户姓名 责任监督员,
B.监督登记号,B.工程名称 from 用户控制信息表 A,工程总信息表 B
where A.用户编号=B.责任监督员 and A.部门 LIKE @P1',
@P3 output, @P4 output, @P5 output, N'@P1 varchar(2)', '四?'
^^^^^
而若我直接在CommandText写入'select A.部门,A.用户姓名 责任监督员,B.监督登记号,
B.工程名称 from 用户控制信息表 A,工程总信息表 B where A.用户编号=B.责任监督员
and A.部门 LIKE ''四室'''
则能正确检索到相应的信息。
请问该如何解决此问题。
 
我估计是手工添加param的问题,最好将SQL语句放在服务端的QUERY中,然后用鼠标右击
clientdataset,选择fetch params获得动态参数,再如下
ClientDataSet2.close;
ClientDataSet2.params.parambyname('bm').asstring:='四室';
ClientDataSet2.open;
参看demos/midas/setparam例子.
 
可是在其它参数的情况下均正常!
 
将 p.DataType:=ftString;
改成 p.DataType := ftWideString 试试?
 
我用另外的办法解决了
 
我也碰到了该问题,主要是因为参数值为汉字时,从clientdataset传送参数,在SQl Server中
产生的脚本语句中的参数类型为varchar,而长度直接为汉字个数,则有一半的汉字参数值无法传到
服务器。不知是否为clientdataset的bug,暂时没找到直接的解决办法。
 
后退
顶部