CORRECTIF : Message d’erreur lorsque vous exécutez une requête « LINQ to Entities » qui utilise un paramètre de chaîne ou un paramètre binaire par rapport à une base de données SQL Server Compact 3.5 : « les types de données ntext et image ne peut pas être utilisés dans WHERE, ayant, regrouper par, sur ou in...

S’applique à : Microsoft SQL Server Compact 3.5

Résumé


Cet article décrit les éléments suivants concernant cette version du correctif :
  • Les problèmes qui sont résolus par le package de correctifs
  • Les conditions préalables à l’installation du package de correctifs
  • Si vous devez redémarrer l’ordinateur après avoir installé le package de correctifs
  • Si le package de correctifs est remplacé par un autre package de correctif logiciel
  • Si vous devez modifier le Registre
  • Les fichiers qui sont contenus dans le package de correctifs

Symptômes


Envisagez le scénario suivant. Une application utilise Microsoft ADO.NET Entity Framework qui est inclus dans le Microsoft.NET Framework 3.5 Service Pack 1 pour accéder à une base de données Microsoft SQL Server Compact 3.5. Dans l’application, vous exécutez une requête « LINQ to Entities » qui utilise un paramètre de chaîne ou un paramètre binaire sur la base de données. Dans ce scénario, le message d’erreur suivant s’affiche lorsque vous exécutez l’application :
Les types de données ntext et image ne peut pas être utilisés dans WHERE, HAVING, GROUP BY, sur ou dans les clauses, sauf lorsque ces types de données sont utilisés avec les prédicats ou IS NULL.

Cause


Lorsque vous utilisez des paramètres pour une requête « LINQ to Entities » dans une application, vous ne pouvez pas spécifier les types de base de données de base. Le fournisseur SQL Server Compact Entity Framework tente de créer un paramètre au niveau du fournisseur en fonction de facettes du modèle EDM (Entity Data Model) du paramètre d’origine. SQL Server Compact ne gère pas le type de données nvarchar (max) ou le type de données varbinary (max) . Par conséquent, lorsque le fournisseur sélectionne le type de données pour un paramètre de type de données Edm.String ou le Edm.Binary du type de données, le fournisseur doit marquer le paramètre comme l’un des types de données suivants selon les facettes EDM du paramètre :
  • Pour un paramètre de chaîne, le fournisseur choisit le type de données nvarchar (4000) ou le type de données ntext .
  • Pour un paramètre binaire, le fournisseur choisit le type de données varbinary(4000) ou le type de données image .
Si le fournisseur marque le paramètre comme type de données nvarchar (4000) ou comme type de données varbinary(4000) , une erreur se produit lorsque vous essayez d’insérer des valeurs supérieures à 8 000 octets. En outre, si le fournisseur marque le paramètre, comme le type de données ntext ou le type de données image , une erreur se produit si les opérations d’égalité, des opérations de regroupement ou d’opérations de tri sont exécutées sur le paramètre.

Résolution


Informations sur le correctif

Un correctif pris en charge est disponible auprès de Microsoft. Toutefois, ce correctif vise à corriger uniquement le problème décrit dans cet article. Appliquez ce correctif uniquement aux systèmes qui rencontrent le problème décrit dans cet article. Ce correctif va peut-être subir des tests supplémentaires. Par conséquent, si vous n'êtes pas sérieusement concerné par ce problème, nous vous recommandons d'attendre la prochaine mise à jour logicielle qui contiendra ce correctif.

Si le correctif est disponible pour le téléchargement, il existe une section « Téléchargement de correctif logiciel disponible » au début de cet article de la Base de connaissances. Si cette section n'apparaît pas, contactez le Service clientèle et Support de Microsoft pour obtenir le correctif.

Remarque Si des problèmes supplémentaires se produisent ou si des procédures de dépannage sont nécessaires, vous devrez peut-être formuler une demande de service distincte. Les coûts habituels du support technique s'appliqueront aux questions et problèmes qui ne relèvent pas de ce correctif logiciel. Pour une liste complète des numéros de téléphone du Service clientèle et support technique de Microsoft ou pour créer une demande de service distincte, visitez le site Web de Microsoft à l'adresse suivante :Remarque Le formulaire « Téléchargement de correctif logiciel disponible » affiche les langues pour lesquelles le correctif est disponible. Si vous ne voyez pas votre langue, c'est parce qu'il n'y a pas de correctif disponible pour cette langue.

Conditions préalables

Pour appliquer ce correctif, vous devez désinstaller le précédemment installé SQL Server Compact 3.5 Service Pack 1 pour installer le fichier .msi qui est fourni avec ce correctif. Si vous ne désinstallez pas le précédemment installé SQL Server Compact 3.5 Service Pack 1, vous recevez un message d’erreur indiquant qu’une version ultérieure de SQL Server Compact est déjà installée. Pour plus d’informations sur SQL Server Compact 3.5 Service Pack 1, cliquez sur le numéro ci-dessous pour afficher l’article correspondant dans la Base de connaissances Microsoft :

Description de 955965 de SQL Server Compact 3.5 Service Pack 1

Informations sur le redémarrage

Vous n’êtes pas obligé de redémarrer l’ordinateur après avoir appliqué ce correctif.

Informations concernant le Registre

Vous n’êtes pas obligé de modifier le Registre.

Informations sur les fichiers de correctif logiciel

Ce correctif contient uniquement les fichiers qui sont nécessaires pour corriger les problèmes décrits dans cet article. Ce correctif ne peut pas contenir tous les fichiers nécessaires à la mise à jour complète d’un produit vers la dernière version.

La version anglaise de ce correctif dispose des attributs de fichier (ou version ultérieure) répertoriés dans le tableau suivant. Les dates et heures de ces fichiers sont répertoriées en temps universel coordonné (UTC). Lorsque vous affichez les informations de fichier, elles sont converties en heure locale. Pour trouver la différence entre l’UTC et l’heure locale, utilisez l’onglet fuseau horaire dans l’élément de Date et heure dans le panneau de configuration.
Nom de fichierVersion de fichierTaille du fichierDateHeurePlateforme
System.data.sqlserverce.entity.dll3.5.5692.1230,48024-Sep-200806:46x86/x64/IA-64
System.data.sqlserverce.dll3.5.5692.1271,44024-Sep-200806:46x86/x64
Policy.3.5.system.data.sqlserverce.dll3.5.5692.113,39224-Sep-200806:46x86/x64
Policy.3.5.system.data.sqlserverce.entity.dll3.5.5692.113,39224-Sep-200806:46x86/x64
Sqlceca35.dll3.5.5692.1343,10424-Sep-200808:07x86
Sqlcecompact35.dll3.5.5692.184,54424-Sep-200808:07x86
Sqlceer35en.dll3.5.5692.1148,03224-Sep-200808:07x86
Sqlceme35.dll3.5.5692.165,08824-Sep-200808:07x86
Sqlceoledb35.dll3.5.5692.1172,60824-Sep-200808:07x86
Sqlceqp35.dll3.5.5692.1644,16024-Sep-200808:07x86
Sqlcese35.dll3.5.5692.1348,22424-Sep-200808:07x86

État


Microsoft a confirmé l'existence de ce problème dans les produits Microsoft répertoriés dans la section « S'applique à ».

Plus d'informations


Après avoir appliqué ce correctif logiciel, le fournisseur deviner pas le type de données pour un paramètre de la du modèle EDM. Chaîne type de données ou de la du modèle EDM. Binaire type de données. Le processeur de requêtes sélectionne le type de données approprié pour le paramètre en fonction de la valeur, ou sur la colonne à laquelle le paramètre est égalé ou avec le paramètre qui est utilisé.

Par exemple, dans la requête Entity SQL suivante, le processeur de requêtes sélectionne le type de données ntext pour le nom de paramètre avant d’appliquer ce correctif.
String name = "XYZ";var q = from e in nwind.Employees
where e.First_Name = name
select e;

Après avoir appliqué ce correctif logiciel, le type de données de la colonne First_Name est sélectionné pour le paramètre de nom .

Toutefois, dans l’exemple suivant, la requête « LINQ à entité » échoue parce que le paramètre name est égalé à ni utilisé avec une autre valeur ou une colonne.
String name = "XYZ";var q = from e in nwind.Employees
select name;

Ce hotfix résout également un problème connu qui est décrite dans le document Lisezmoi de SQL Server Compact 3.5. Pour plus d’informations, consultez la section « SQL Server Compact 3.5 SP1 Runtime problèmes pour l’ADO.NET Entity Framework » du site Web Microsoft suivant :Ce correctif résout le problème lié à des instructions Transact-SQL incorrectes qui sont générées lorsque le fournisseur convertit des sous-requêtes scalaires à appliquer des constructions.

Remarque Les sous-requêtes sont convertis en interne à des sous-requêtes scalaires. Les sous-requêtes ne sont pas pris en charge dans cette version. Lorsque vous exécutez ces requêtes, le message d’erreur suivant s’affiche :
Une erreur s’est produite lors de l’exécution de la définition de commande. Consultez l’exception interne pour plus de détails.
L’exception interne contient le message suivant :
Il y a une erreur d’analyse de la requête. [.., Jeton, erreur = comme]
La raison est que l’ADO.NET Entity Framework interprète la requête d’entrée sous la forme d’une requête qui possède le type de jointure CROSS APPLY ou le type de jointure OUTER APPLY. Si la partie droite de la condition de jointure renvoie une valeur scalaire, la jointure est convertie en une sous-requête scalaire. Le fournisseur ADO.NET Entity Framework pour SQL Server Compact doit convertir cette sous-requête scalaire dans une requête équivalente qui possède le type de jointure OUTER APPLY, qui est pris en charge par SQL Server Compact. Toutefois, dans cette version, cette conversion n'est pas effectuée correctement. Par exemple, une erreur se produit pour la requête suivante dans cette version.
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());
}
}

Pour plus d’informations sur le schéma d’appellation des mises à jour de SQL Server, cliquez sur le numéro ci-dessous pour afficher l’article correspondant dans la Base de connaissances Microsoft :

Packages de mises à jour 822499 nouveau schéma d’appellation pour les logiciels de Microsoft SQL Server

Pour plus d'informations sur la terminologie de mise à jour logicielle, cliquez sur le numéro ci-dessous pour afficher l'article correspondant dans la Base de connaissances Microsoft :
Description 824684 terminologie standard utilisée pour décrire les mises à jour logicielles de Microsoft