После обновления Windows 10 до 1803 я начал получать эту ошибку каждый раз, когда запускаю запрос EF, который присоединяется к функции с табличным значением, которая принимает скалярный параметр.
Message: The incoming tabular data stream (TDS) remote procedure call (RPC) protocol stream is incorrect. Parameter 2 (""): Data type 0x00 is unknown.
Stack Trace: at System.Data.SqlClient.SqlCommand.<>c.b__180_0(Task1 result) at System.Threading.Tasks.ContinuationResultTaskFromResultTask`2.InnerInvoke() at System.Threading.Tasks.Task.Execute() --- End of stack trace from previous location where exception was thrown --- at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at System.Data.Entity.Core.EntityClient.Internal.EntityCommandDefinition.d__c.MoveNext()
Я использую Entity Framework v6.2 в проектах платформы .NET 4.6. Я убедился, что тот же код работает без проблем на другом компьютере с 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, запрос будет выполнен. SQL, сгенерированный указанным выше запросом EF, отлично работает в SSMS.
Изменить 15/5/2018: Я подтвердил, что это специально вызвано .NET Framework 4.7.2. Я вручную установил .NET 4.7.2 на свой компьютер с Windows 10 1709, и ошибка снова началась.
Я открыл заявку на GitHub и упомянул там эту проблему: github.com/aspnet/EntityFramework6/issues/537
Спасибо, что помогли подтвердить, что я не сумасшедший. Полезно знать об асинхронной части. Я восстановил систему до 1709 на моем основном рабочем ПК, и я снова в работе.
Обновление - инженеры разработали исправление на стороне сервера базы данных SQL и проходят процедуру безопасного развертывания. ETA 24-48 часов.





Мы исследуем это как возможную регрессию в SqlClient в .NET Framework. Любой, кто может предоставить репро-проект, разместит его на https://github.com/Microsoft/dotnet/issues/749.
Пока мне удалось воссоздать его только с помощью EDMX для моей базы данных. Репро-проект, ориентированный на гораздо более простой EDMX, не выдал ошибку. Я все еще пытаюсь упростить копию моего EDMX, пока ошибка не исчезнет.
Временное решение: На ChainbridgeTech измените MultipleActiveResultSets с TRUE на FALSE в моей строке подключения, и ошибка прекратится.
Об этом сообщалось, и сейчас над этим работают. Им все еще нужна репродукция, и я все еще работаю над выделением общих данных, которые я могу опубликовать:
https://github.com/Microsoft/dotnet/issues/749
Повторяющийся выпуск Ошибка TDS при вызовах SQL Azure Entity Framework после обновления Windows 10 за апрель 2018 г.
Решением для меня было преобразовать запрос, который умирал от использования .Include, в .IncludeOptimized, и теперь он работает.
Microsoft активно занимается этим вопросом. Насколько нам известно, проблема связана с .NET framework 4.7.2 с MARS (множественные активные наборы результатов) при использовании async / await.
Известные обходные пути включают откат обновления Windows / .NET framework, без использования MARS или без использования async / await.
Если у вас есть дополнительная информация, которая поможет нам сузить круг вопросов, добавьте в отчет о проблеме на https://github.com/Microsoft/dotnet/issues/749
Обновление - на основании нашего расследования затронуты только клиенты базы данных SQL Azure. Мы планируем развернуть исправление на стороне службы Azure SQL DB примерно через 24 часа. Между тем, упомянутые выше обходные пути действительны (откат обновления, отключение MARS или удаление async / await).
Меня зовут Питер Карлин, я работаю в команде SQL Server. Сначала я хочу извиниться за этот инцидент и за то, что он повлиял на пользователей .NET Framework 4.7.2. Далее я хочу более подробно объяснить, что произошло, и как Microsoft это исправляет.
Проблемы возникают из-за улучшений функции Always Encrypted в SQL. Эти улучшения расширяют набор операций, которые можно выполнять в Always Encrypted, однако они еще не готовы для использования приложениями. Эти улучшения включают изменения как на стороне SqlClient, так и на стороне SQL-сервера. Мы ввели ошибку в .NET Framework 4.7.2, так что в некоторых случаях (связанных с MARS) SqlClient неправильно считает, что добавленные функции уже используются, и отправляет недопустимые запросы в SQL. SQL отклоняет сообщения об ошибках, представленные в этой ветке. Это происходит только при подключении к серверу SQL, который также поддерживает дополнительные функции. База данных SQL первой получает последние изменения SQL и недавно развернула дополнительные функции.
Наше немедленное исправление состоит в том, чтобы убедиться, что база данных SQL работает так, как будто она не имеет дополнительных функций, поэтому ошибка стороны SqlClient в 4.7.2 не встречается. Вот почему мы можем решить проблему с помощью изменения стороны базы данных SQL.
Мы работаем так быстро, как разумно / безопасно, чтобы развернуть, проверить исправление. На данный момент исправление развернуто примерно на 10% наших производственных мощностей с ожидаемым завершением к понедельнику 21 мая.
Спасибо за быстрый ответ. Я убедился, что исправлены все серверы SQL Azure, к которым я подключаюсь.
У меня точно такая же проблема, тот же код работает в Windows 7. Я пробовал много разных вещей, но все еще не могу заставить его работать. Один из способов, которым мне удалось заставить его работать, - это использовать неасинхронные методы.