【发布时间】:2015-07-08 00:07:13
【问题描述】:
我正在运行一个 .NET 4.0 应用程序,该应用程序使用 LINQ to SQL 与 SQL Server 2008 R2 标准版进行通信。我有一个包含nvarchar(max) 类型列的表,并且应用程序使用字符串填充该列作为其操作的一部分。
对于大小 > ~30 MB 的字符串,我们发现一旦插入\更新完成,部分字符串会被截断,并且存储在服务器中的不是完整的字符串。问题是字符串在可变位置被截断(截断后我们仍然留下超过 30 MB 的数据),所以没有一些固定点可以引导我走向一些大小限制的方向(尽管这仍然可能就是这样)。
我没有看到插入时间有任何错误,尽管有时我注意到在如此长的插入\更新期间 SQL 服务器会关闭连接 - 但在这种情况下操作不应该回滚吗?
希望有一些想法。不知道如何进行。
【问题讨论】:
-
您可能需要将其存储为文本而不是 nvarchar(max)。根据您在该行中拥有的其他数据,您可能会碰到总行宽。看看technet.microsoft.com/en-us/library/…
-
@LordBaconPants text 和 ntext 数据类型已被弃用,不应用于新的实现。 MS 明确指出你应该使用 varchar(max) 和 nvarchar(max)
-
为什么要将 30mb 的字符串数据存储在单个 db 列中?好像您在数据库中有建模问题。此外,在我看来,您的截断问题可能仍然存在于您的应用程序中。如果您使用的是 Web 服务,则可能存在发送和接收限制,例如在 WCF 服务的情况下:stackoverflow.com/questions/884235/…
-
如果字符串太长,有什么理由在插入字符串之前不检查它们的大小?然后你可以在插入之前拆分它们。
-
你是如何确定字符串被截断的?如果您正在使用 Management Studio 做出决定,则可能会产生误导。
标签: c# sql-server string linq