我在msdn上找到了有关 string(.net framework type) 和相应 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' 的字符串。事实上,无论我注释或取消注释设置参数的类型、大小、结果的代码,r 总是正确的,总是相同的。
请帮助我,我对msdn上的指令有误解吗?
谢谢你。