[英]“String or Binary Data Would be Truncated” Error when using Linq to SQL
我正在使用Linq to SQL將數據插入表中,但是出現SqlException,提示“字符串或二進制數據將被截斷”。 但是,該表僅包含兩個GUID,它們的大小完全相同。 和nvarchar(max),並且我的字符串少於20個字符。
我嘗試使用SqlCmd手動插入行,並且工作正常。 我還使用SQL Profiler進行了驗證,沒有任何內容寫入跟蹤,這表明問題是從Linq到SQL框架造成的。
該表的定義是:
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[Results](
[GroupID] [uniqueidentifier] NOT NULL,
[ItemID] [uniqueidentifier] NOT NULL,
[Name] [nvarchar](max) NOT NULL,
PRIMARY KEY (GroupID, ItemID)
) ON [PRIMARY]
GO
SET ANSI_PADDING OFF
GO
Linq到SQL的映射(來自DBML文件)為:
<Table Name="dbo.Results" Member="Results">
<Type Name="Result">
<Column Name="GroupID" Type="System.Guid" DbType="UniqueIdentifier NOT NULL" IsPrimaryKey="true" CanBeNull="false" />
<Column Name="ItemID" Type="System.Guid" DbType="UniqueIdentifier NOT NULL" IsPrimaryKey="true" CanBeNull="false" />
<Column Name="Name" Type="System.String" DbType="NVarChar(MAX) NOT NULL" CanBeNull="false" />
</Type>
</Table>
在我的C#代碼中,這給出了異常:
db.Results.InsertOnSubmit(new Result
{
GroupID = Guid.NewGuid(),
ItemID = Guid.NewGuid(),
Name = "test"
});
db.SubmitChanges();
我發現這是有關nvarchar(max)被截斷的問題。 該問題的答案可能會解決您的問題。 可能是誤會,但我希望能有所幫助。 這是一個不同的問題,但兩者都是關於nvarchar(max)被截斷的問題……
我仍然不明白這到底是怎么回事。 看起來像是Linq到SQL的映射不好,或者(不太可能)是框架中的錯誤。
但是為了解決這個問題,我替換了:
db.Results.InsertOnSubmit(new Result
{
GroupID = Guid.NewGuid(),
ItemID = Guid.NewGuid(),
Name = "test"
});
db.SubmitChanges();
附:
string cmd = string.Format("insert into Results values('{0}', '{1}', '{2}')", Guid.NewGuid(), Guid.NewGuid(), "test")
db.ExecuteCommand(cmd);
並且這有效(不僅適用於測試字符串,而且適用於實際數據)。
仍然很想知道是什么導致了原始代碼的異常...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.