1

クエリをパラメータ化しようとしています。例:

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データ型(バリアント?不明?文字列?)に関するものです(ええ、私のタイトルを変更した人は誰でも)
4

0 に答える 0