CORRECÇÃO: Mensagem de erro quando você executa uma consulta de "LINQ para entidades" que usa um parâmetro de seqüência de caracteres ou um parâmetro de binário em um banco de dados SQL Server Compact 3.5: "os tipos de dados ntext e image não podem ser usados em WHERE, HAVING, agrupar BY, ON ou IN cláusulas"

Traduções deste artigo Traduções deste artigo
ID do artigo: 958478 - Exibir os produtos aos quais esse artigo se aplica.
Expandir tudo | Recolher tudo

Neste artigo

Sumário

Este artigo descreve o seguinte sobre esta versão de hotfix:
  • Problemas corrigidos pelo pacote de hotfix
  • Os pré-requisitos para instalar o pacote de hotfix
  • Se é necessário reiniciar o computador depois de instalar o pacote de hotfix
  • Se o pacote de hotfix é substituído por qualquer outro pacote de hotfix
  • Se você deve fazer alterações no registro
  • Arquivos que estão contidos no pacote de hotfix

Sintomas

Considere o seguinte cenário. Um aplicativo usa o Microsoft ADO.NET Entity Framework que acompanha o Microsoft .NET Framework 3.5 Service Pack 1 para acessar um banco de dados Microsoft SQL Server Compact 3.5. No aplicativo, você executa uma consulta "LINQ para entidades" que usa um parâmetro de seqüência de caracteres ou um parâmetro binário no banco de dados. Nesse cenário, você receber a seguinte mensagem de erro quando você executa o aplicativo:
Os tipos de dados ntext e image não podem ser usados em WHERE, HAVING, GROUP BY, ON ou IN cláusulas, exceto quando esses tipos de dados são usados com o LIKE ou IS NULL predicados.

Causa

Quando você usa parâmetros para uma consulta de "LINQ para entidades" em um aplicativo, não é possível especificar os tipos de banco de dados base. O provedor SQL Server Compact Entity Framework tenta criar um parâmetro de nível de provedor com base nas facetas do EDM (modelo de dados de entidade) do parâmetro original. SQL Server Compact não dá suporte para o tipo de dados nvarchar (max) ou o tipo de dados varbinary (max) . Portanto, quando o provedor seleciona o tipo de dados para um parâmetro do tipo de dados edm.String ou do tipo de dados edm.Binary , o provedor tem que marcar o parâmetro como um dos seguintes tipos de dados com base nas facetas EDM do parâmetro:
  • Para um parâmetro de seqüência de caracteres, o provedor seleciona o tipo de dados nvarchar(4000) ou o tipo de dados ntext .
  • Para um parâmetro binário, o provedor seleciona o tipo de dados varbinary(4000) ou o tipo de dados de imagem .
Se o provedor de marcar o parâmetro como o tipo de dados nvarchar(4000) ou como o tipo de dados varbinary(4000) , ocorrerá um erro ao tentar inserir valores que são maiores do que 8.000 bytes. Além disso, se o provedor de marcar o parâmetro como o tipo de dados ntext ou como o tipo de dados de imagem , um erro ocorre se qualquer operações de igualdade, operações de agrupamento ou operações de classificação estão sendo executadas no parâmetro.

Resolução

Informações sobre o hotfix

Um hotfix suportado está disponível no Microsoft. No entanto, esse hotfix destina-se a corrigir o problema descrito neste artigo. Aplique-o somente aos sistemas que apresentarem o problema descrito neste artigo. Esta correcção poderá submetida a testes adicionais. Portanto, se você não tiver sido gravemente afetado por esse problema, recomendamos que você aguarde a próxima atualização de software que contém esse hotfix.

Se o hotfix está disponível para download, há uma seção "Download de Hotfix disponível" na parte superior neste artigo da Base de dados de Conhecimento. Se esta seção não for exibida, contate o atendimento e suporte para obter o hotfix.

Observação Se ocorrerem problemas adicionais ou se qualquer solução de problemas é necessária, talvez você precise criar uma solicitação de serviço separada. Os custos normais de suporte serão aplicados a questões de suporte adicionais e problemas que não se qualificam para esse hotfix específico. Para obter uma lista completa de números de telefone de suporte e Atendimento Microsoft ou para criar uma solicitação de serviço separada, visite o seguinte site:
http://support.microsoft.com/contactus/?ws=support
Observação O formulário "Download de Hotfix disponível" exibe os idiomas para os quais o hotfix está disponível. Se você não vir seu idioma, é porque um hotfix não está disponível para esse idioma.

Pré-requisitos

Para aplicar esse hotfix, você deve desinstalar o instalada anteriormente SQL Server Compact 3.5 Service Pack 1 para instalar o arquivo .msi é fornecido com esse hotfix. Se você não desinstalar o instalada anteriormente SQL Server Compact 3.5 Service Pack 1, você receberá uma mensagem de erro de instalação que afirma que uma versão mais recente do SQL Server Compact já está instalada. Para obter mais informações sobre o SQL Server Compact 3.5 Service Pack 1, clique no número abaixo para ler o artigo na Base de dados de Conhecimento da Microsoft:
955965Descrição do SQL Server Compact 3.5 Service Pack 1

Informações sobre reinicialização

Não é necessário reiniciar o computador após aplicar esse hotfix.

Informações do registro

Não é necessário alterar o registro.

Informações sobre o arquivo de hotfix

Esse hotfix contém apenas os arquivos que são necessárias para corrigir os problemas que este artigo lista. Este hotfix pode não conter todos os arquivos que você deve ter para actualizar completamente um produto para a compilação mais recente.

A versão em inglês deste hotfix tem atributos de arquivo (ou atributos de arquivo posteriores) listados na tabela a seguir. As datas e horas desses arquivos estão listadas no horário de universal coordenado (UTC). Quando você exibe as informações do arquivo, ele é convertido para a hora local. Para encontrar a diferença entre o UTC e a hora local, use a guia fuso horário no item Data e hora no painel de controle.
Recolher esta tabelaExpandir esta tabela
Nome de arquivoVersão do arquivoTamanho do arquivoDataTempoPlataforma
System.Data.SqlServerCe.Entity.dll3.5.5692.1230,48024 De setembro de 200806: 46x 86 / x 64/IA-64
System.Data.SqlServerCe.dll3.5.5692.1271,44024 De setembro de 200806: 46x 86 / x 64
Policy.3.5.System.Data.SqlServerCe.dll3.5.5692.113,39224 De setembro de 200806: 46x 86 / x 64
Policy.3.5.System.Data.SqlServerCe.Entity.dll3.5.5692.113,39224 De setembro de 200806: 46x 86 / x 64
Sqlceca35.dll3.5.5692.1343,10424 De setembro de 200807: 08x 86
Sqlcecompact35.dll3.5.5692.184,54424 De setembro de 200807: 08x 86
Sqlceer35en.dll3.5.5692.1148,03224 De setembro de 200807: 08x 86
Sqlceme35.dll3.5.5692.165,08824 De setembro de 200807: 08x 86
Sqlceoledb35.dll3.5.5692.1172,60824 De setembro de 200807: 08x 86
Sqlceqp35.dll3.5.5692.1644,16024 De setembro de 200807: 08x 86
Sqlcese35.dll3.5.5692.1348,22424 De setembro de 200807: 08x 86

Situação

A Microsoft confirmou que este é um problema nos produtos da Microsoft listados na seção "Aplica-se a".

Mais Informações

Depois de aplicar esse hotfix, o provedor não adivinhar o tipo de dados para um parâmetro do tipo de dados EDM.String ou do tipo de dados EDM.Binary . O processador de consultas seleciona o tipo de dados correto para o parâmetro baseado no valor ou em da coluna para que o parâmetro igualasse ou com que o parâmetro é usado.

Por exemplo, na consulta de Entity SQL a seguir, o processador de consultas seleciona o tipo de dados ntext para o parâmetro de nome antes de aplicar esse hotfix.
String name = "XYZ";
var q = from e in nwind.Employees
           where e.First_Name = name
           select e;
Após aplicar esse hotfix, o tipo de dados da coluna nome é selecionado para o parâmetro nome .

No entanto, no exemplo a seguir, a consulta "LINQ a entidade" falhará porque o parâmetro de nome não é igualasse para nem usado com qualquer outro valor ou coluna.
String name = "XYZ";
var q = from e in nwind.Employees
           select name;
Esse hotfix também resolve um problema conhecido que descritos no documento Leiame para SQL Server Compact 3.5. Para obter mais informações, consulte a seção "SQL Server Compact 3.5 SP1 Runtime problemas para o ADO.NET Entity Framework" do seguinte site da Microsoft:
http://download.microsoft.com/download/2/e/c/2ec70436-aef2-4ccb-93a3-ea2f3e20f77d/ReadmeSSC35.htm
Esse hotfix resolve o problema está relacionado ao incorretas instruções Transact-SQL que são geradas quando o provedor converte subconsultas escalares para aplicar construções.

Observação Subconsultas correlacionadas são convertidas em subconsultas escalares internamente. Não há suporte para subconsultas correlacionadas nesta versão. Quando você executa essas consultas, você receber a seguinte mensagem de erro:
Ocorreu um erro ao executar a definição de comando. Consulte a exceção interna para obter detalhes.
A exceção interna contém a seguinte mensagem:
Erro ao analisar a consulta. [.., Token em erro = AS]
O motivo é que o ADO.NET Entity Framework interpreta a consulta de entrada como uma consulta que tenha o tipo de associação CROSS APPLY ou o tipo de associação OUTER APPLY. Se o lado direito da condição de associação retorna um valor escalar, a associação é convertida em uma subconsulta escalar. O provedor ADO.NET Entity Framework para SQL Server Compact tem que converter a subconsulta escalar em uma consulta equivalente que tenha o tipo de associação OUTER APPLY, que é suportado pelo SQL Server Compact. No entanto, nesta versão, essa conversão não é feita corretamente. Por exemplo, ocorrerá um erro para a consulta a seguir nesta versão.
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());
    }
}
Para obter mais informações sobre o esquema para nomeação para atualizações do SQL Server, clique no número abaixo para ler o artigo na Base de dados de Conhecimento da Microsoft:
822499Novo esquema para nomeação para pacotes de atualização de software do Microsoft SQL Server
Para obter mais informações sobre terminologia de atualização de software, clique no número abaixo para ler o artigo na Base de dados de Conhecimento da Microsoft:
824684Descrição da terminologia padrão que é usada para descrever as atualizações de software

Propriedades

ID do artigo: 958478 - Última revisão: terça-feira, 17 de fevereiro de 2009 - Revisão: 1.1
A informação contida neste artigo aplica-se a:
  • Microsoft SQL Server Compact 3.5
Palavras-chave: 
kbmt kbexpertiseadvanced kbfix kbautohotfix kbsurveynew kbqfe kbhotfixserver KB958478 KbMtpt
Tradução automática
IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine Translation ou MT), não tendo sido portanto traduzido ou revisto por pessoas. A Microsoft possui artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais, com o objetivo de oferecer em português a totalidade dos artigos existentes na base de dados de suporte. No entanto, a tradução automática não é sempre perfeita, podendo conter erros de vocabulário, sintaxe ou gramática. A Microsoft não é responsável por incoerências, erros ou prejuízos ocorridos em decorrência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza atualizações freqüentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 958478

Submeter comentários

 

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