插入nvarchar(max)字段时出现Truncated String Data错误

时间:2013-07-18 14:43:12

标签: asp.net sql-server

我有一个SqlDataSource和一个<asp:ListView>设置来处理另一个表单上的评论,其中包含以下文本框:

<asp:TextBox ID="CommentTextBox" runat="server" Text='<%# Bind("Comment") %>' Width="400px" Height="125px" TextMode="MultiLine" />

数据源上设置了InsertCommandasp:Parameter

InsertCommand="INSERT INTO [tblSLS_SpecComments] ([SpecID], [Author], [Comment]) VALUES (@SpecID, @Author, @Comment)" 
  <asp:Parameter Name="SpecID" Type="Int32" />
  <asp:Parameter Name="Author" Type="String" />
  <asp:Parameter Name="Comment" Type="String" />

当我尝试插入更长的评论时(例如500'f's),我收到错误:

  

字符串或二进制数据将被截断   声明已经终止。

我插入的列是数据类型nvarchar(max),因此它应该能够容纳一本书的字符数,这比我处理它的要少得多。

有关正在发生的事情的任何线索?

4 个答案:

答案 0 :(得分:1)

你可以检查你的表是否有任何触发到另一个数据表,触发器尝试将值插入/更新到较小的字段。

答案 1 :(得分:0)

Nvarchar(Max)不能成为该错误的来源。检查this问题 检查其他字段,例如Author,并尽可能使用MaxLenght texbox的属性。

答案 2 :(得分:0)

当我尝试在nvarchar(max)字段中插入设计器中的长值(编辑前200行...)时发生了这种情况。

当我从查询窗口手动运行更新时,它工作正常。

答案 3 :(得分:0)

我在SQL Server 2008中遇到了一个奇怪的情况,即使查询根本不尝试插入任何内容(例如Where 1 <> 1),我也无法插入nvarchar(max)列。对我而言唯一有效的解决方案是 sp_updatestats 。显然,服务器认为源列值可能大于nvarchar(max)(实际上是nvarchar(20))