SqlDbTypeへの変換や推論がそれほど賢くない? その2

下のエントリの件、8000バイトを超えるバイト配列と4000文字を超える文字列の場合について実際に検証してみましたが、ドキュメントの記載に反して変換されました。ドキュメントがまちがっているんですかねぇ、それとも理解がまちがっているんでしょうか。

どういった検証をしたかというと、まず次のテーブルをつくりました。

create table Hoge (
	id int primary key,
	aaa nvarchar(max),
	bbb varbinary(max)
);

次に、以下のコードを実行しました。


[TestMethod]
public void TestInsert()
{
using (var connection = new SqlConnection(Settings.Default.DbProviderTestConnectionString))
{
connection.Open();
using (var command = connection.CreateCommand())
{
command.CommandText = "insert into Hoge (id, aaa, bbb) values (@id, @aaa, @bbb)";
{
var parameter = command.CreateParameter();
parameter.ParameterName = "@id";
parameter.Value = 1;
command.Parameters.Add(parameter);
}
{
var parameter = command.CreateParameter();
parameter.ParameterName = "@aaa";
parameter.Value = new string('a', 10000);
command.Parameters.Add(parameter);
}
{
var parameter = command.CreateParameter();
parameter.ParameterName = "@bbb";
parameter.Value = Enumerable.Repeat<byte>(0xFF, 10000).ToArray();
command.Parameters.Add(parameter);
}
command.ExecuteNonQuery();
}
}
}

そして、実行後に以下のSQLを実行値がちゃんと格納されたことを確認しました。

select LEN(aaa) length_of_aaa, LEN(bbb) length_of_bbb from Hoge where id = 1

SQLの結果。

length_of_aaa length_of_bbb
10000 10000