簡體   English   中英

使用Linq to SQL時出現“字符串或二進制數據將被截斷”錯誤

[英]“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)被截斷的問題……

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM