修补程序: 错误消息"LINQ to Entities"查询运行时使用字符串参数或对 SQL Server Compact 3.5 数据库二进制参数:"中的位置,不能使用 ntext 和图像数据类型,或 IN.,分组,通过...

文章翻译 文章翻译
文章编号: 958478 - 查看本文应用于的产品
展开全部 | 关闭全部

本文内容

概要

本文介绍有关此修补程序发布了以下:
  • 通过此修补程序包修复的问题
  • 安装此修复程序包的先决条件
  • 安装此修补程序包后是否必须重新启动计算机
  • 是否有此修补程序包替换任何其他修补程序软件包
  • 是否必须更改注册表
  • 此修复程序包中包含的文件

症状

请考虑下面的方案。应用程序使用 Microsoft ADO.NET 实体框架包含在 Microsoft.NET Framework 3.5 的 Service Pack 1 访问 Microsoft SQL Server Compact 3.5 数据库。在应用程序中,您可以运行使用一个字符串参数或二进制参数对数据库的"LINQ to Entities"查询。在这种情况下,当您运行应用程序时收到以下错误消息:
Ntext 和图像数据类型不能采用,HAVING、 GROUP BY,开或子句,除非这些数据类型是使用类似的或者是空谓词。

原因

当您为"LINQ to Entities"查询应用程序中使用参数时,则不能指定基本数据库类型。SQL Server Compact 实体框架提供程序尝试创建提供程序级参数基于实体数据模型 (EDM) 方面的原始参数。SQL Server Compact 不支持nvarchar(max)数据类型或varbinary(max)数据类型。因此,当该提供程序选择数据类型参数或Edm.Binary数据类型Edm.String数据类型的则提供程序必须将该参数标记为下面基于 EDM 方面的参数的数据类型之一:
  • 为一个字符串参数,该提供程序选择nvarchar(4000)数据类型或ntext数据类型。
  • 对于二进制的参数,该提供程序选择varbinary(4000)数据类型或图像数据类型。
如果提供程序标记为nvarchar(4000)的数据类型或varbinary(4000)数据类型的参数,那么当您尝试插入大于 8000 个字节的值,就会出错。此外,如果该提供程序将标记作为ntext数据类型或图像数据类型的参数,如果在参数上正在执行任何相等运算、 分组操作或排序操作发生错误。

解决方案

修补程序信息

Microsoft 提供了一个受支持的修补程序。然而,此修补程序仅用于解决本文中描述的问题。此修复程序仅适用于系统遇到本文中描述的问题。此修补程序可能会接受进一步的测试。因此,如果这个问题没有对您造成严重的影响,我们建议您等待包含此修复程序的下一个软件更新。

如果此修复程序可供下载,则在此知识库文章顶部"提供修补程序下载"部分。如果未显示此节,请与 Microsoft 客户服务和支持联系以获取此修复程序。

注意: 如果出现其他问题或需要任何故障诊断时,您可能需要创建单独的服务请求。对于此特定的修补程序不需要照常收取支持费用到其他支持问题和事项。Microsoft 客户服务和支持电话号码,或创建单独的服务请求的完整列表,请访问下面的 Microsoft 网站:
http://support.microsoft.com/contactus/?ws=support
注意: "提供修补程序下载"窗体显示获取此修复程序的语言。如果看不到您的语言,则修补程序没有那种语言的版本。

系统必备组件

若要应用此修补程序,您必须卸载以前安装的 SQL Server Compact 3.5 Service Pack 1 若要安装此修补程序的.msi 文件的提供。如果没有卸载以前安装的 SQL Server Compact 3.5 Service Pack 1,您会收到错误消息,指出已经安装了较新版本的 SQL Server Compact。 有关 SQL Server Compact 3.5 Service Pack 1 的详细信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
955965 SQL Server Compact 3.5 版 Service Pack 1 的说明

重新启动信息

应用此修补程序后,不需要重新启动计算机。

注册表信息

您不需要更改注册表。

修补程序文件信息

此修补程序包含解决本文列出的问题所需的那些文件。此修复程序可能不包含您必须将产品完全更新到最新版本的所有文件。

此修复程序的英文版具有的文件属性 (或更新的文件属性)在下表中列出。日期和为这些文件的时间以协调世界时 (UTC) 列出。当您查看文件信息时,它将转换为本地时间。要了解 UTC 与本地时间之间的时差,请使用控制面板中的日期和时间项中的时区选项卡。
收起该表格展开该表格
文件名称文件版本文件大小日期时间平台
System.data.sqlserverce.entity.dll3.5.5692.1230,4802008-年 9 月 2406:46x 86/x 64/IA-64
System.data.sqlserverce.dll3.5.5692.1271,4402008-年 9 月 2406:46x86/x 64
Policy.3.5.system.data.sqlserverce.dll3.5.5692.113,3922008-年 9 月 2406:46x86/x 64
Policy.3.5.system.data.sqlserverce.entity.dll3.5.5692.113,3922008-年 9 月 2406:46x86/x 64
Sqlceca35.dll3.5.5692.1343,1042008-年 9 月 2408:07x86
Sqlcecompact35.dll3.5.5692.184,5442008-年 9 月 2408:07x86
Sqlceer35en.dll3.5.5692.1148,0322008-年 9 月 2408:07x86
Sqlceme35.dll3.5.5692.165,0882008-年 9 月 2408:07x86
Sqlceoledb35.dll3.5.5692.1172,6082008-年 9 月 2408:07x86
Sqlceqp35.dll3.5.5692.1644,1602008-年 9 月 2408:07x86
Sqlcese35.dll3.5.5692.1348,2242008-年 9 月 2408:07x86

状态

Microsoft 已经确认这是"适用于"一节中列出的 Microsoft 产品中的问题。

更多信息

应用此修补程序后,因此提供程序都没有猜到切割参数的数据类型。字符串数据类型或EDM。二进制数据类型。查询处理器选择基于值或向其赋值的参数或该参数使用的列的参数正确的数据类型。

例如,在下面的实体 SQL 查询中,查询处理器将选择name参数ntext数据类型在您应用此修补程序之前。
String name = "XYZ";
var q = from e in nwind.Employees
           where e.First_Name = name
           select e;
应用此修补程序后,数据类型的列中为name参数选择。

然而,在下面的示例中,"LINQ 到实体"查询失败因为name参数不等同于也不与任何其他的值或列一起使用。
String name = "XYZ";
var q = from e in nwind.Employees
           select name;
此修补程序还解决已知的问题,所述 SQL Server Compact 3.5 自述文档。有关详细信息,请参阅"SQL Server Compact 3.5 SP1 运行时问题的 ADO.NET 实体框架"部分中的下列 Microsoft Web 站点:
http://download.microsoft.com/download/2/e/c/2ec70436-aef2-4ccb-93a3-ea2f3e20f77d/ReadmeSSC35.htm
此修补程序解决的问题,都与不正确时,提供程序将转换应用构造的标量子查询生成的事务处理 SQL 语句。

注意:相关子查询内部转换为标量的子查询。在此版本中不支持相关子查询。当您运行这些查询时,您会收到以下错误消息:
执行命令定义时出错。请参阅内部异常以了解详细信息。
内部异常包含以下消息:
分析查询时出错。[..,标记错误 = AS]
原因是 ADO.NET 实体框架将输入的查询解释为具有跨应用联接类型或外部应用的联接类型的查询。如果连接条件的右侧返回一个标量值,则联接将被转换为标量子查询。对于 SQL Server Compact ADO.NET 实体框架提供程序必须将该标量子查询转换为等效的查询具有外部应用联接类型,这由 SQL Server Compact 支持。但是,在此版本中,不正确地进行这种转换。例如,下面的查询在此版本中发生错误。
C# Sample Application:
using (NorthwindEntities nwEntities = new NorthwindEntities())
{
    var orders = nwEntities.Employees
                .Select(employee => employee.Orders.Max(order => order.Order_ID));
    foreach (var order in orders)
    {
       Console.WriteLine(order.ToString());
    }
}
有关更新 SQL Server 的命名架构的详细信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
822499 对于 Microsoft SQL Server 软件更新程序包的新命名方案
有关软件更新术语的详细信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
824684 用来描述 Microsoft 软件更新的标准术语的说明

属性

文章编号: 958478 - 最后修改: 2015年1月11日 - 修订: 2.0
这篇文章中的信息适用于:
  • Microsoft SQL Server Compact 3.5
关键字:?
kbexpertiseadvanced kbfix kbautohotfix kbsurveynew kbqfe kbmt KB958478 KbMtzh
机器翻译
重要说明:本文是由 Microsoft 机器翻译软件进行的翻译并可能由 Microsoft 社区通过社区翻译机构(CTF)技术进行后期编辑,或可能是由人工进行的翻译。Microsoft 同时向您提供机器翻译、人工翻译及社区后期编辑的文章,以便对我们知识库中的所有文章以多种语言提供访问。翻译的文章可能存在词汇、句法和/或语法方面的错误。Microsoft 对由于内容的误译或客户对内容的使用所导致的任何不准确、错误或损失不承担责任。
点击这里察看该文章的英文版: 958478
Microsoft和/或其各供应商对于为任何目的而在本服务器上发布的文件及有关图形所含信息的适用性,不作任何声明。 所有该等文件及有关图形均"依样"提供,而不带任何性质的保证。Microsoft和/或其各供应商特此声明,对所有与该等信息有关的保证和条件不负任何责任,该等保证和条件包括关于适销性、符合特定用途、所有权和非侵权的所有默示保证和条件。在任何情况下,在由于使用或运行本服务器上的信息所引起的或与该等使用或运行有关的诉讼中,Microsoft和/或其各供应商就因丧失使用、数据或利润所导致的任何特别的、间接的、衍生性的损害或任何因使用而丧失所导致的之损害、数据或利润不负任何责任。

提供反馈

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com