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

时间:2010-09-15 14:35:28

标签: .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);

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

我正在使用MS SQL Server 2008。

提前致谢。

5 个答案:

答案 0 :(得分:6)

根据MSDN

  

的NVarChar:

     

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

这是ntext:

  

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

还可以查看this

答案 1 :(得分:3)

您是否尝试过调用AddWithValue(String name, Object value)

答案 2 :(得分:1)

另一个尝试的建议:使用SqlDbType.NText代替SqlDbType.NVarChar

答案 3 :(得分:0)

One Suggesstion ..您是否尝试过使用SqlDbType.XML ...没有必要在另一端解析xml ...您只需将值存储在varchar中。

答案 4 :(得分:0)

如果您明确创建SqlParameter,仍然有问题,例如:

SqlParameter t = new SqlParameter("@" + name, type);
t.Value = value;

然后将其添加到参数?

另外,如果你正在调用一个sproc,只是为了确保sproc的param也被声明为nvarchar(max),或者你没有使用sproc尝试使用它。我一直在推动varbinary(max)blob没有任何问题,所以也许二进制文件可以得到更好的处理。