2010-09-15 42 views
7

我试图执行到数据库中的插入命令,其中一列的类型为nvarchar(MAX)。插入命令是使用.NET SqlCommand类创建的,每个参数都由一个SqlParameter对象表示。使用非常长(10000+个字符)的字符串作为SqlParameter值

我的命令总是被执行,但是当我传递的字符串长度很大(10000+字符)并且被用作SqlParameter的值映射到插入后类型为nvarchar(MAX)的列时,列留空。我再说一遍,不会抛出异常,执行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.

在此先感谢。

+1

您是否设置了值?我看到的只是你创建一个参数,但没有分配任何值。 – 2010-09-15 17:51:50

回答

1

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

0

一个Suggesstion ..你有没有尝试过使用SqlDbType.XML ...没有必要解析XML在另一端...你可以简单地存储在varchar中的值。

6

根据MSDN

的NVarChar:

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

这里的NTEXT:

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

还检查了this

+0

修复你的格式:)。 – 2010-09-15 14:54:51

+2

'ntext'已被弃用,'text'和'image'也被弃用。 'nvarchar(max)'替换'ntext' – 2010-09-15 17:48:48

+0

@Pierre:我们在谈论SqlDbType(http://msdn.microsoft.com/en-US/library/system.data.sqldbtype(v=VS.80)。 aspx),这在客户端。你所说的只有在服务器端才是真实的。 – 2010-09-15 18:15:24

3

你有没有打过电话AddWithValue(String name, Object value)

+0

+1注意到他正在创建一个参数,但没有实际设置参数的值。 – 2010-09-15 15:27:54

0

你仍然有,如果你明确地创建SqlParameter的,像这个问题:

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

,然后将其添加到参数?

另外,如果您正在调用一个存储过程,只是为了确保存储过程的参数也被声明为nvarchar(max),或者如果您没有使用存储过程,请尝试使用它。我一直在推动varbinary(max)blob没有任何问题,所以也许二进制得到更好的治疗。