我有一个SqlDataSource
和一个<asp:ListView>
设置来处理另一个表单上的评论,其中包含以下文本框:
<asp:TextBox ID="CommentTextBox" runat="server" Text='<%# Bind("Comment") %>' Width="400px" Height="125px" TextMode="MultiLine" />
数据源上设置了InsertCommand
和asp: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)
,因此它应该能够容纳一本书的字符数,这比我处理它的要少得多。
有关正在发生的事情的任何线索?
答案 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))