クエリをパラメータ化しようとしています。例:
INSERT INTO Trunions (Encabulator) VALUES (?)
これは(サンプル)クエリから来ています:
INSERT INTO Trunions (Encabulator) VALUES ('Mẫrsểl vằnęs')
これで、SQL Serverデータベーステーブルに互換性のある文字列列が含まれている限り、このクエリが実行されます。
char(300)
nchar(300)
varchar(300)
nvarchar(300)
text
ntext
varchar(max)
nvarchar(max)
私の元の関数クエリは機能します。クエリをパラメータ化するとすぐに、コードは機能しなくなります。
String sql = "INSERT INTO Trunions (Encabulator) VALUES (?)";
String value = "Mẫrsểl vằnęs";
Command cmd = new Command();
...
cmd.Set_CommandText(sql);
cmd.Set_CommandType(adCmdText);
cmd.Parameters.Append(cmd.CreateParameter("param1", adLongVarWChar, adParamInput, -1, value);
cmd.Execute(out recordsAffected, Null, adCmdText | adExecuteNoRecords);
SQL Serverは、パラメーターの種類が列のデータ型と一致しない(つまり、カーペットがカーテンと一致しない)と文句を言います。
データ型%sからデータ型%s、テーブル'%s'、列'%s'への暗黙的な変換は許可されていません。
CONVERT関数を使用して、このクエリを実行します
この例では、「最良の」(つまり、最も包括的なデータ型)を使用しようとしましたadLongVarWChar
。
しかし、私が必要としているのは、「任意の長さのUnicode文字列」の代わりに使用できるデータ型です。
どのADOパラメータタイプがSQLServer文字列列に入れられても存続しますか?
ノート:
- ADO.netではなくADO
- その質問は、エラーと解決策への自由な希望についてです。この質問は、一般的な「テキスト」adoデータ型(バリアント?不明?文字列?)に関するものです(ええ、私のタイトルを変更した人は誰でも)