ADOに対してパラメーター化されたクエリを使用しようとしています:
INSERT INTO Foo(Name、Value)VALUES(@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
しようと思いました。