字符串或二进制数据将被截断 - 列足够大

时间:2016-01-11 18:17:49

标签: c# sql-server entity-framework

我有一个令人困惑的问题。我有一个使用本地SQL Server数据库的WPF应用程序。我正在使用实体框架。我正在尝试将长度为120的字节数组存储到BINARY(120)列中。

数据应该适合,但由于某种原因我不断收到错误,'字符串或二进制数据将被截断'。

表结构如下所示:

Column_name   Type        Computed   Length

Id            int         no         4
Foo           varchar     no         500
Bar           binary      no         120

作为一项实验,我尝试将列更改为VARBINARY(MAX)列,但即使在这种情况下,我仍然会遇到相同的错误。这通常表明另一列可能导致问题,但是我知道问题不是Id列,而我存储到Foo中的字符串是“测试字符串”,这显然足够小。

插入数据库的方法没有做任何特别的事情:

public void Create(FooEntry entry)
{
    _context.FooEntries.Add(entry);
    _context.SaveChanges();
}

也许我错过了一些非常明显的东西,但我该如何解决这个问题呢?

更新

是的,我很确定EDMX和数据库表是同步的(因为当我更新数据库表时,我总是刷新edmx)。

我试图手动将长度为120的字节数组插入表中,但没有得到错误。当我手动插入长度为121的字节数组时,“字符串或二进制数据将被截断”发生错误,这是正确的行为。

我在调试程序时尝试插入的字节数组是这个值:

 '0x2400320061002400310030002400510078004400310072003400390079004C006D0041004A00760049004E005700730069007900490058004F007400740052007600500031006900700078004C0044007000610032004900350038007700310059002E0071003300680033004B0064002F00430074005700'

这是一个长度为120的字节数组。

更新2:

我运行了SQL Server Profiler,它给了我以下SQL查询:

exec sp_executesql N'INSERT [dbo].[FooEntry]([Foo], [Bar])
VALUES (@0, @1)
SELECT [Id]
FROM [dbo].[FooEntry]
WHERE @@ROWCOUNT > 0 AND [Id] = scope_identity()',N'@0 varchar(500),@1 binary(120)',@0='test string',@1=0x24003200610024003100300024004100420047007400560056006A0076004D006F006500770036005000300054004D002F006B007800740075007A00490036004F004400660047004A0062004E0069004E00790041007A0051006A0058004300660072007400360051007A0043004B004400580075006500

非常奇怪。当我手动执行它时,此查询有效,但在程序运行时执行此查询时,EF会抛出错误。

1 个答案:

答案 0 :(得分:2)

我终于找到了问题,答案很荒谬。

我的项目目录中有两个数据库,DatabaseA和DatabaseB具有相同的模式。实体框架正在对DatabaseA运行查询,但是我的EDMX指向DatabaseB,而我的服务器资源管理器中显示的数据库是DatabaseB。

这个问题可能发生在我修复我之前遇到的导致我的本地SQL Server数据库数据被每个构建覆盖的问题时。

对于遇到此问题的任何人,我的建议是确保解决方案中的app.config文件都具有指向同一数据库的连接字符串。我解决这个问题的方法是更新数据层中的连接字符串:

1)我删除了app.config文件中的连接字符串

2)在我的EDMX设计器中,我删除了我的FooEntry表,然后右键单击并选择“从数据库更新模型”。然后弹出一个对话框,允许我创建一个新的连接字符串。通过此对话框,您可以浏览正确的数据库,Visual Studio将为您创建正确的连接字符串。