msdn で string(.net フレームワーク タイプ) と対応する nvarchar( dbtype ) のマッピングに関する情報を見つけました。
文字列が NVarChar の最大サイズである 4000 文字より大きい場合、この暗黙的な変換は失敗します。4000 文字を超える文字列の場合は、明示的に SqlDbType を設定してください。
「明示的に設定」の意味がわかりません。だから私は次のようにいくつかのコードを書きます:
char[] c = new char[5000];
for (int i = 0; i < 5000; i++)
{
c[i] = 'a';
}
string s = new string(c);
using (SqlConnection conn = new SqlConnection(connstr))
{
conn.Open();
// create command object
var comm = conn.CreateCommand();
comm.CommandText = "select @s";
// create parameter for command
var p = comm.CreateParameter();
p.ParameterName = "@s";
// p.DbType = DbType.String;
// p.Size = 5000;
p.Value = s;
// add parameter to command
comm.Parameters.Add(p);
// execute command
var r = comm.ExecuteScalar();
}
ご覧のとおり、パラメーターの型とパラメーターのサイズを設定していないため、msdn の指示に基づいて、実行時に例外が発生すると考えました。残念ながら、それは完全に正しく実行され、結果 r は 5000 個の 'a' を含む文字列でした。実際、パラメータのタイプ、サイズを設定するコードをコメントまたはコメント解除しても、結果は常に正しく、常に同じになります。
助けてください。msdn の指示について何か誤解していますか?
ありがとうございました。