Windows 2010年4月更新后的Azure实体框架SQL调用上的TDS错误

时间:2018-05-15 15:51:56

标签: sql-server azure sqlclient .net-4.7.2

我有以下针对Azure中托管的SQL Server执行的C#代码。

protected IQueryable<T> FilterUpdatedRows<T>(IQueryable<T> query, DateTime lastSyncTimestamp) where T: class, ITimestamp
{
    return query.Where(x => x.InsertTimestamp >= lastSyncTimestamp ||
                            (x.UpdateTimestamp.HasValue && x.UpdateTimestamp >= lastSyncTimestamp));
}

Generic(T)是实现框架上下文类,它们实现和接口强制定义InsertTimestamp和UpdateTimestamp。

此代码运行良好,直到我安装了Windows 10的2018年4月更新。发布更新后我收到以下错误...

  

SqlException:传入的表格数据流(TDS)远程过程调用(RPC)协议流不正确。参数2(“”):数据类型0x00未知。

我确认导致问题的参数是InsertTimestamp和UpdateTimestamp字段。

仅当我在Azure上定位我的SQL数据库副本时才会发生此错误。将数据库导出到本地数据库可以正常工作。在访问Azure版本时,尚未升级到2018年4月更新的团队成员没有问题。

我在本地版本上运行了一个SQL Trace并捕获了正在执行的SQL语句。通过SSMS针对Azure版本运行该语句可以正常运行。

以下是跟踪捕获的SQL语句...

exec sp_executesql N'SELECT 
    [Extent1].[CrossingId] AS [CrossingId], 

    ... Misc other fields ...

    [Extent1].[CrossingInstanceId] AS [CrossingInstanceId]
    FROM (SELECT 
    [V_SYNC_CrossingsSync].[CrossingId] AS [CrossingId], 

    ... Misc other fields ...

    [V_SYNC_CrossingsSync].[CrossingInstanceId] AS [CrossingInstanceId]
    FROM [dbo].[V_SYNC_CrossingsSync] AS [V_SYNC_CrossingsSync]) AS [Extent1]
    WHERE ([Extent1].[InsertTimestamp] >= @p__linq__0) OR (([Extent1].[UpdateTimestamp] IS NOT NULL) AND ([Extent1].[UpdateTimestamp] >= @p__linq__1))',N'@p__linq__0 datetime2(7),@p__linq__1 datetime2(7)',@p__linq__0='1980-01-01 00:00:00',@p__linq__1='1980-01-01 00:00:00'

对可能发生的事情的任何想法?

由于

1 个答案:

答案 0 :(得分:0)

Temp解决方法: ChainbridgeTech 在我的连接字符串中将MultipleActiveResultSets从TRUE更改为FALSE,错误就会停止。

这已被报道并正在进行中。他们仍然需要一个repro,我仍然在努力隔离我可以公开的可共享数据:

https://github.com/Microsoft/dotnet/issues/749