三层结构应用服务器中的AdoQuery1的sql为: select * from table1 where mc=:@mc , 其中mc字段是varchar(60)类型.在客户端有一个clientDataSet1通过DataSet Provider 与AdoQuery1相联, 当使用如下代码对参数赋值时发现如下问题:
with clientdataset1 do
begin
params.parameterByName('@mc').value='非技术问题';
open;
end; 但执行结果是:记录集为空. 通过sql profile跟踪,发现传递给sql server 的sql 语句及其参数都是以'N带头的,其中对参数@mc只是定义为varchar(5) , 使用双字节字符集进行传递参数.
我如何改变delphi这种内定行为??????
with clientdataset1 do
begin
params.parameterByName('@mc').value='非技术问题';
open;
end; 但执行结果是:记录集为空. 通过sql profile跟踪,发现传递给sql server 的sql 语句及其参数都是以'N带头的,其中对参数@mc只是定义为varchar(5) , 使用双字节字符集进行传递参数.
我如何改变delphi这种内定行为??????
改成 params.parameterByName('@mc').value=''''+'非技术问题'+'''';
意思是说要作为一个字符串传过去才行。
2.最好是把查询语句打印出来看看。
可以用如下方法:
如:
s := 'select * from t where id=%d and name=''%s'' ';
s := format(s,[varID,varName]);
然后把语句放入cs中。
这样可以在调试的时候把查询语句用 ctrl+f7 弄出来放到查询分析器中执行一下。我也没有真正的作过三层软件,好久以前看过一些。
以上几点有可能不对,敬请参考。