我正在尝试对 ADO 使用参数化查询:
插入 Foo(名称,值)值(@name,@value)
在 SQL Server 中,Name
列是一种varchar
类型。该Value
列是一个nvarchar(max)
.
当我不知道或想要指定大小时,我在创建参数时传递什么大小?
procedure SaveTheThing(Connection: TADOConnection);
var
sql: WideString;
cmd: _Command;
begin
sql := 'INSERT INTO Foo (Name, Value) VALUES(@name, @value)';
cmd := CoCommand.Create;
cmd.Set_ActiveConnection(Connection.ConnectionObject);
cmd.Set_CommandType(adCmdText);
cmd.Set_CommandText(sql);
//and now add the parameters
cmd.Parameters.Append(
cmd.CreateParameter('@name', adVarChar, adParamInput, -1, filename)
);
cmd.Parameters.Append(
cmd.CreateParameter('@value', adVarWChar, adParamInput, -1, GetXmlToWideString)
);
cmd.Execute({out}recordsAffected, EmptyParam, adCmdSomeThatDoesntCauseAnExcetpion or adExecuteNoRecords);
end;
简单的替代方案将是:
sql := 'INSERT INTO Foo (Name, Value)'#13#10+
'VALUES (+QuotedStr(filename)+', '+QuotedStrW(GetXmlToWideString)+')';
并且已经完成了。但我想我会花几天时间尝试使参数化查询成为可行的解决方案,并且避免编写QuotedStrW
.