我正在尝试在数据库中执行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。
提前致谢。
答案 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没有任何问题,所以也许二进制文件可以得到更好的处理。