使用非常长(10000+个字符)的字符串作为SqlParameter值

vuk*_*hin 7 .net sql-server string ado.net

我试图在数据库中执行insert命令,其中一列是nvarchar(MAX)类型.Insert命令是使用.NET SqlCommand类创建的,每个参数由一个SqlParameter对象表示.

我的命令总是被执行,但是当我传递长度很大(超过10000个字符)的字符串并且在插入后用作映射到nvarchar(MAX)类型的列的SqlParameter的值时,该特定列为空.我再说一遍,没有抛出异常,执行INSERT命令,但是列为空.

以下示例是我尝试创建参数的方式:

// message is the large string variable
// first solution
insertCommand.Parameters.Add("@message", SqlDbType.NVarChar, -1);

// second solution
insertCommand.Parameters.Add("@message", SqlDbType.NVarChar, message.Length);

// third solution
insertCommand.Parameters.Add("@message", SqlDbType.NVarChar, message.Length * 2);
Run Code Online (Sandbox Code Playgroud)

这些解决方案都没有给出结果.如果有人知道是什么问题请告诉我.

我正在使用MS SQL Server 2008.

提前致谢.

Bet*_*eth 6

根据MSDN

的NVarChar:

串.Unicode字符的可变长度流,范围在1到4,000个字符之间.如果字符串大于4,000个字符,则隐式转换将失败.使用长度超过4,000个字符的字符串时,请明确设置对象.

这是ntext:

串.Unicode数据的可变长度流,最大长度为2 30 - 1(或1,073,741,823)个字符.

还看看这个

  • 不推荐使用`ntext`,`text`和`image`也是如此.`nvarchar(max)`替换`ntext` (2认同)

Joe*_*lli 1

另一个尝试建议:使用SqlDbType.NText而不是SqlDbType.NVarChar.