Исправление: Сообщение об ошибке при выполнении запроса «LINQ to Entities», использует двоичный параметр в базе данных SQL Server Compact 3.5 или строковый параметр: «данные типов ntext и image нельзя использовать в WHERE, ВОЗНИКАЮТ, ГРУППИРОВКИ, на или оператора IN...

Номер ошибки: 99150 (Content Maintenance)ошибка #: 50003448 (исправление SQL)

Обзор

В статье описываются следующие о выпуске исправлений:

  • Ошибки, исправленные в пакете исправлений

  • Необходимые условия для установки пакета исправлений

  • Необходимость перезагрузки компьютера после установки пакета исправлений

  • Ли исправление заменено другими исправлениями

  • Ли необходимо внести изменения в реестр

  • Файлы, содержащиеся в пакете исправлений

Симптомы

Рассмотрим следующую ситуацию. Приложение использует Microsoft ADO.NET Entity Framework, включенные в Microsoft платформа.NET Framework 3.5 Пакет обновления 1 для доступа к базе данных Microsoft SQL Server Compact 3.5. В приложении запустите «LINQ to Entities» запрос, использующий параметр строки или двоичный параметр в базе данных. В этом случае появляется следующее сообщение об ошибке при запуске приложения:

Типы данных ntext и image не может использоваться в КОТОРЫХ, HAVING, GROUP BY, или в предложениях, за исключением случаев, когда эти типы данных используются с т или NULL предикатов.

Причина

При использовании параметров для запроса «LINQ to Entities» в приложении нельзя задать тип базы данных. Поставщик SQL Server Compact Entity Framework пытается создать параметр уровня поставщика на основании исходного параметра аспекты сущностной модели данных (EDM). SQL Server Compact не поддерживает тип данных nvarchar(max) или тип данных varbinary(max) . Таким образом когда поставщик выбирает тип данных для параметра типа данных Edm.String или Edm.Binary типа данных, поставщик должен пометить параметра как один из следующих типов данных на основании модели EDM аспекты параметра:

  • Для строкового параметра Поставщик выбирает nvarchar(4000) тип данных или тип данных ntext .

  • Для двоичного параметра Поставщик выбирает varbinary(4000) тип данных или тип данных image .

Если поставщик помечается параметр как nvarchar(4000) тип данных или тип данных varbinary(4000) , возникает ошибка при попытке вставки значения, размер которых превышает 8000 байт. Кроме того Если поставщик помечается как тип данных ntext или тип данных параметра, возникает ошибка при выполнении любой операции равенства, операции группирования или операции сортировки для параметра.

Решение

Сведения об исправлении

Существует исправление от корпорации Майкрософт. Однако данное исправление предназначено для устранения только проблемы, описанной в этой статье. Применяйте это исправление только в тех случаях, когда наблюдается проблема, описанная в данной статье. Это исправление может проходить дополнительное тестирование. Таким образом если вы не подвержены серьезно этой проблеме, рекомендуется дождаться следующего пакета обновления, содержащего это исправление.

Если исправление доступно для скачивания, имеется раздел "Пакет исправлений доступен для скачивания" в верхней части этой статьи базы знаний. Если этот раздел не отображается, обратитесь в службу поддержки для получения исправления.

Примечание. Если наблюдаются другие проблемы или необходимо устранить неполадки, вам может понадобиться создать отдельный запрос на обслуживание. Стандартная оплата за поддержку будет взиматься только за дополнительные вопросы и проблемы, которые не соответствуют требованиям конкретного исправления. Чтобы получить полный список телефонов поддержки и обслуживания клиентов корпорации Майкрософт или создать отдельный запрос на обслуживание, посетите следующий веб-сайт корпорации Майкрософт:

http://support.microsoft.com/contactus/?ws=supportПримечание. В форме "Пакет исправлений доступен для скачивания" отображаются языки, для которых доступно исправление. Если нужный язык не отображается, значит исправление для данного языка отсутствует.

Предварительные условия

Для установки этого исправления необходимо удалить ранее установленного SQL Server Compact 3.5 Пакет обновления 1 для установки MSI-файл, который поставляется с исправления. Если не удалить ранее установленного SQL Server Compact 3.5 Пакет обновления 1, появляется сообщение об ошибке установки о том, что уже установлена более поздняя версия SQL Server Compact. Дополнительные сведения о SQL Server Compact 3.5 Пакет обновления 1 щелкните следующий номер статьи базы знаний Майкрософт:

Описание 955965 Compact 3.5 Пакет обновления SQL Server 1

Сведения о перезагрузке компьютера

Не требуется перезагружать компьютер после установки данного исправления.

Сведения о реестре

Не требуется внесение изменений в реестр.

Сведения о файлах

Данное исправление содержит только файлы, которые необходимы для устранения описанных в этой статье перечислены. Это исправление может содержать не все файлы, которые необходимы для полного обновления продукта до последней сборки.

Английская версия данного исправления содержит атрибуты файла (или более поздние атрибуты файлов), приведенные в следующей таблице. Дата и время для этих файлов указаны в формате общего скоординированного времени (UTC). При просмотре сведений о файле, он преобразуется в локальное время. Чтобы узнать разницу между временем по Гринвичу и местным временем, откройте вкладку Часовой пояс элемента Дата и время в панели управления.

Имя файла

Версия файла

Размер файла

Дата

Время

Платформа

System.data.sqlserverce.entity.dll

3.5.5692.1

230,480

24-Sep-2008

06:46

x86/x64/IA-64

System.data.sqlserverce.dll

3.5.5692.1

271,440

24-Sep-2008

06:46

x86/x64

Policy.3.5.system.data.sqlserverce.dll

3.5.5692.1

13,392

24-Sep-2008

06:46

x86/x64

Policy.3.5.system.data.sqlserverce.entity.dll

3.5.5692.1

13,392

24-Sep-2008

06:46

x86/x64

Sqlceca35.dll

3.5.5692.1

343,104

24-Sep-2008

08:07

x86

Sqlcecompact35.dll

3.5.5692.1

84,544

24-Sep-2008

08:07

x86

Sqlceer35en.dll

3.5.5692.1

148,032

24-Sep-2008

08:07

x86

Sqlceme35.dll

3.5.5692.1

65,088

24-Sep-2008

08:07

x86

Sqlceoledb35.dll

3.5.5692.1

172,608

24-Sep-2008

08:07

x86

Sqlceqp35.dll

3.5.5692.1

644,160

24-Sep-2008

08:07

x86

Sqlcese35.dll

3.5.5692.1

348,224

24-Sep-2008

08:07

x86

Если это исправление не опубликовано для загрузки (то есть в этой статье отсутствует общедоступный URL-адрес этого исправления), распространения требуется ведущего технического специалиста, члена группы распространения или руководителя и справедливы следующие утверждения:

  • Чтобы получить исправление, клиенты должны столкнуться с ошибкой, описанной в разделе «Проблема».

  • Необходимо отследить всех клиентов, для отправки и предоставить им следующий пакет обновления, когда он станет доступным (если выпущен пакет обновления).

Это исправление планируется включить в будущие исправления и пакеты обновления для SQL Server Compact 3.5 Пакет обновления 1.

В разделе «Решение» указано, доступно ли это исправление в исправлении или в последнем пакете обновления. Для сравнения и тестирования оригинальное исправление доступно на веб-узле http://hotfix .

Примечание в службу технической поддержки: чтобы получить построения 3.5.5692.1, посетите следующий веб-узел корпорации Майкрософт:

http://hotfix

В поле Поиск в базе Знаний введите 958478и нажмите кнопку Перейти.

Статус

Корпорация Майкрософт подтверждает, что это проблема продуктов Майкрософт, перечисленных в разделе "Относится к".

Дополнительные сведения

После установки данного исправления, поставщик не догадаться, тип данных для параметра модели EDM. Строка тип данных или модели EDM. Двоичный тип данных. Обработчик запросов выбирает правильный тип данных для параметра на основе значения или столбца к полному параметра или с которого используется параметр.

Например в следующем запросе Entity SQL, обработчик запросов выбирает тип данных ntext для имени параметра, перед установкой исправления.

String name = "XYZ";var q = from e in nwind.Employees
where e.First_Name = name
select e;

После установки данного исправления для имени параметра выбран тип данных, имя столбца.

Тем не менее в следующем примере «LINQ для сущности» запрос завершится ошибкой, так как параметр name ни пары, ни использовать для любого значения или столбца.

String name = "XYZ";var q = from e in nwind.Employees
select name;

Это исправление также устраняет известную проблему, описанную в документе readme для SQL Server Compact 3.5. Дополнительные сведения содержатся в разделе «SQL Server Compact 3.5 с пакетом обновления 1 среда выполнения проблем для ADO.NET Entity Framework» из следующий веб-узел корпорации Майкрософт:

http://download.microsoft.com/download/2/e/c/2ec70436-aef2-4ccb-93a3-ea2f3e20f77d/ReadmeSSC35.htmЭто исправление устраняет проблему, которая связана с неверные инструкции Transact-SQL, создаются, когда поставщик преобразует скалярные вложенные запросы для применения конструкций.

Примечание. Коррелированные вложенные запросы внутренне преобразуются в скалярных вложенных запросов. Коррелированные вложенные запросы не поддерживаются в данном выпуске. Во время выполнения этих запросов, появляется следующее сообщение об ошибке:

Произошла ошибка при выполнении команды определения. Дополнительные сведения см.

Внутреннее исключение содержит следующее сообщение:

Произошла ошибка при разборе запроса. [.., Маркер в ошибке = AS]

Причина в том, что платформа ADO.NET Entity Framework интерпретирует входного запроса как запрос, который имеет тип объединения CROSS APPLY или тип соединения OUTER APPLY. Если в правой части условие соединения возвращает скалярное значение, объединение преобразуется в скалярный вложенный запрос. Поставщик ADO.NET Entity Framework для SQL Server Compact должен преобразовать в эквивалентный запрос, который имеет тип соединения OUTER APPLY, который поддерживается в 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 щелкните следующий номер статьи базы знаний Майкрософт:

Новая схема присвоения имен 822499 для программного обеспечения Microsoft SQL Server пакетами обновления

Для получения дополнительных сведений о терминологии обновлений программного обеспечения щелкните следующий номер статьи базы знаний Майкрософт:

Описание 824684 Стандартные термины, используемые при описании обновлений программных продуктов Майкрософт

Сведения о стеке вызова

   at System.Data.EntityClient.EntityCommandDefinition.ExecuteStoreCommands(EntityCommand entityCommand, CommandBehavior behavior)
at System.Data.Objects.Internal.ObjectQueryExecutionPlan.Execute[TResultType](ObjectContext context, ObjectParameterCollection parameterValues)
at System.Data.Objects.ObjectQuery`1.GetResults(Nullable`1 forMergeOption)
at System.Data.Objects.ObjectQuery`1.System.Collections.Generic.IEnumerable<T>.GetEnumerator()
at System.Linq.Enumerable.FirstOrDefault[TSource](IEnumerable`1 source)
at System.Data.Objects.ELinq.ObjectQueryProvider.<GetElementFunction>b__1[TResult](IEnumerable`1 sequence)
at System.Data.Objects.ELinq.ObjectQueryProvider.ExecuteSingle[TResult](IEnumerable`1 query, Expression queryRoot)
at System.Data.Objects.ELinq.ObjectQueryProvider.System.Linq.IQueryProvider.Execute(Expression expression)
at System.Linq.Queryable.FirstOrDefault[TSource](IQueryable`1 source, Expression`1 predicate)


Автор: bruceye; rtandon
Записи: ericzha
Технический редактор: Kennethr; abidkhan; rtandon; vamshikb
Редактор: v-andmck

Нужна дополнительная помощь?

Совершенствование навыков
Перейти к обучению
Первоочередный доступ к новым возможностям
Присоединение к программе предварительной оценки Майкрософт

Были ли сведения полезными?

Спасибо за ваш отзыв!

Благодарим за отзыв! Возможно, будет полезно связать вас с одним из наших специалистов службы поддержки Office.

×