【问题标题】:"String or Binary Data Would be Truncated" Error when using Linq to SQL使用 Linq to SQL 时出现“字符串或二进制数据将被截断”错误
【发布时间】:2016-04-30 16:06:04
【问题描述】:

我正在使用 Linq to SQL 将数据插入表中,但得到一个 SqlException 说“字符串或二进制数据将被截断”。但是,该表仅包含两个具有精确大小的 GUID;和一个 nvarchar(max),我的字符串少于 20 个字符。

我尝试使用 SqlCmd 手动插入行,效果很好。我还使用 SQL Profiler 验证了跟踪中没有写入任何内容,这表明问题来自 Linq to 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();

【问题讨论】:

    标签: c# sql sql-server linq-to-sql


    【解决方案1】:

    我发现这是一个关于 nvarchar(max) 被截断的问题。该问题的答案可能会解决您的问题。这可能是误解,但我希望它有所帮助。 这是一个不同的问题,但两者都是关于 nvarchar(max) 被截断所以......

    nvarchar(max) still being truncated

    【讨论】:

      【解决方案2】:

      我仍然不明白这里到底发生了什么;看起来像是一个糟糕的 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);
      

      这有效(不仅适用于测试字符串,还适用于实际数据)。

      仍然很想了解导致原始代码异常的原因...

      【讨论】:

        猜你喜欢
        • 2017-09-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-04-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多