数据库:SQL SERVER 2000
连接:ADO
例句:
with ClientDataSet do
begin
CommandText:='SELECT * FROM ATable WHERE AField=:AParamName';
ParamByName('AParamName').AsString='中文字符串';
Open;
end;
上述语句,虽然数据库中有符合条件的记录,但却 SELECT 不到。
如果换成英文字符串则可以。快救命啊! 多谢了。
连接:ADO
例句:
with ClientDataSet do
begin
CommandText:='SELECT * FROM ATable WHERE AField=:AParamName';
ParamByName('AParamName').AsString='中文字符串';
Open;
end;
上述语句,虽然数据库中有符合条件的记录,但却 SELECT 不到。
如果换成英文字符串则可以。快救命啊! 多谢了。
with ClientDataSet do
begin
CommandText:='SELECT * FROM ATable WHERE AField='+QuotedStr('中文字符串');
Open;
end;可要是这样,就不能利用参数化的优点了。
这是 ParamByName 的 BUG 还是什么原因?
来自:SnoopyChen, 时间:2002-10-30 20:15:00, ID:1403452
VCL Source: ADODB.pasfunction VarDataSize(const Value: OleVariant): Integer;
begin
if VarIsNull(Value) then
Result := -1
else if VarIsArray(Value) then
Result := VarArrayHighBound(Value, 1) + 1
else if TVarData(Value).VType = varOleStr then
begin
[red] //Result := Length(PWideString(@TVarData(Value).VOleStr)^);
Result := Length(String(Value));[/red]
if Result = 0 then
Result := -1;
end
else
Result := SizeOf(OleVariant);
end;
var
ws:WideString;
i:Integer;
begin
ws:=s;
for i:=1 to Length(ws) do
begin
if Ord(ws[i])>255 then
s:=s+' ';
end;
Result:=s;
end; ClientDataset.Params[0].value:=ToCDSParamsString(AString);
先用着吧