自从将 Windows 10 更新到 1803 以来,每当我运行连接接受标量参数的表值函数的 EF 查询时,我都会开始收到此错误。
消息:传入的表格数据流 (TDS) 远程过程调用
(RPC)协议流不正确。参数2(“”):数据类型0x00
未知。
堆栈跟踪:位于 System.Data.SqlClient.SqlCommand.c.b__180_0(Task1
结果)在
System.Threading.Tasks.ContinuationResultTaskFromResultTask`2.InnerInvoke()
at System.Threading.Tasks.Task.Execute() --- 堆栈跟踪结束
之前抛出异常的位置 --- at
System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() 在
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务
任务)在
System.Data.Entity.Core.EntityClient.Internal.EntityCommandDefinition.d__c.MoveNext()
我在 .NET 4.6 框架项目中使用 Entity Framework v6.2。我验证了相同的代码在另一台使用 Windows 10 1709 的计算机上执行没有问题。我将计算机更新到 Windows 10 1803,没有进行其他更改,但我开始收到上述错误。导致错误的代码:
var query = from fs in db.ViewWithInformation
join e in db.GetEventsForPerson(personnelId) on fs.Event_Id equals e.Event_Id
where !fs.Is_Deleted
select fs;
return await query.ToArrayAsync();
如果我删除针对 db.GetEventsForPerson 的联接,则查询将运行。上面的 EF 查询生成的 SQL 在 SSMS 中运行良好。
2018 年 5 月 15 日编辑:我已确认这是由 .NET Framework 4.7.2 造成的。我在 Windows 10 1709 计算机上手动安装 .NET 4.7.2,错误再次出现。
我叫 Peter Carlin,在 SQL Server 团队工作。我首先想对这一事件以及对 .NET Framework 4.7.2 用户的影响表示歉意。接下来我想更详细地解释发生了什么以及微软如何修复它。
这些问题是由于 SQL 中的 Always Encrypted 功能的改进所致。这些改进扩展了可在 Always Encrypted 中完成的操作集,但尚未准备好供应用程序使用。这些改进涉及对 SqlClient 和 SQL Server 端的更改。我们在 .NET Framework 4.7.2 中引入了一个错误,使得在某些情况下(与 MARS 相关)SqlClient 错误地认为添加的功能正在使用并向 SQL 发送无效请求。 SQL 拒绝那些带有此线程中看到的错误消息的内容。仅当连接到也支持添加功能的 SQL 服务器时才会发生这种情况。 SQL DB 是第一个获取最新 SQL 更改的数据库,并且最近部署了添加的功能。
我们立即修复的是确保 SQL DB 的行为就像没有添加的功能一样,因此不会遇到 4.7.2 中的 SqlClient 端错误。这就是为什么我们能够通过 SQL 数据库端更改来解决该问题。
我们正在尽可能快速、安全地部署、验证和修复。目前,该修复已部署到我们大约 10% 的生产能力,预计在 5 月 21 日星期一之前完成。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)