我正在尝试使用与 Delphi TADOCommand 的参数查询 :
var
s: WideString;
cmd: TADOCommand;
recordsAffected: OleVariant;
begin
cmd := TADOCommand.Create(nil);
cmd.Connection := Connection;
cmd.CommandText := INSERT INTO Sqm(Filename) VALUES(:filename) ;
s := AFilename;
cmd.Parameters.ParamByName( filename ).Value := s;
cmd.Execute();
数据库中产生的数据被完全混合:
C.A.A.O.I.A.A.P.I.A.A.P.A.P.D?A.L.O?A.A.A.A.A.A.A.A.A.A.A.P.D?A.D?A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.A.
i < strong > can 使用本地参数化 ADO Command
对象。 它保存数据正确 :
C̬:Ȗŝḙr͇s̶i̜ẵn̥.ÀV̹AͧT̶O̠P̩I̿ȀA͜p̥p̔D͑ẫt̒āL̫o͋ɕălͭA̼v̼ẵt͈ấr̄ S̫o̖f͎t̻w̵ạr͂ẽ C̾r̮ḛẵt͘iͩo̳n̬s̨S̪ōf̒t͘w̚âr̿ɇ Qͬüẳlͮi̫tͥy̽ M͘ȇt̨r̟i̻çšC͍MͥS̚-s̞q̕m͜00.xͤm̧l̝
但它的
在德尔斐语中如何使用有 TADOCommand
的unicode/WideStrings?
< 坚固 > Bonus 聊天 < /坚固 >
在 SQL 服务器配置文件中, 您可以看到 SQL 正在执行 :
Exec sp_executeesql N INSERT into Sqm (P1), N@P1 char(300),@P2 text, C? Us? er? i?
从而指出问题 - 它正在将 < code> WideString 参数构建为 < code> char( 300) 值, 使其不破损 。
我最后一次看到我的宽链 在它掉进参数洞之前是:
ParameterObject.Value := NewValue;
何 地
NewValue
is a variant of typeVT_BSTR
(akavarOleStr
) with the proper valueParameterObject
is a native ADO_Parameter
object, with a.Type
of 129 (adChar
)
甚至试图强制参数类型 :
cmd.Parameters.ParamByName( filename ).DataType := ftWideString;
cmd.Parameters.ParamByName( filename ).Value := s;
没有帮助。
注: 这个问题是关于如何将 INSTERT(价值) VALUES(%s)
与 foo(价值) VALUES(%s) 相配的系列的一部分。
- https://stackoverflow.com/questions/10726212/using-wrong-type-with-parameterized-query-causes-error
- How big is an nvarchar(max) as far as ADO is concerned?
- How to parameterize widestrings using TADOCommand parameterized query?
- "Must declare the variable @myvariable" error with ADO parameterized query