FIX: Foutbericht tijdens het uitvoeren van een query "LINQ-diensten" die gebruikmaakt van een tekenreeksparameter of binaire parameter tegen een database van SQL Server Compact 3.5: "de gegevenstypen ntext en image kunnen niet worden gebruikt in waar, gelet, GROEPEREN, op of IN...

Van toepassing: Microsoft SQL Server Compact 3.5

Samenvatting


Dit artikel beschrijft het volgende over deze hotfix:
  • De problemen die met het hotfix-pakket worden opgelost
  • De vereisten voor het installeren van het hotfix-pakket
  • Of u de computer opnieuw moet opstarten na het installeren van het hotfix-pakket
  • Of het hotfix-pakket wordt vervangen door een ander hotfixpakket
  • Of u eventuele wijzigingen in het register moet aanbrengen
  • De bestanden die zijn opgenomen in het hotfix-pakket

Symptomen


Neem het volgende scenario. Een toepassing gebruikt de Microsoft ADO.NET entiteit Framework die is opgenomen in Microsoft.NET Framework 3.5 servicepack 1 voor toegang tot een database van Microsoft SQL Server Compact 3.5. In de toepassing, kunt u een query "LINQ-diensten" die gebruikmaakt van een tekenreeksparameter of binaire parameter voor de database uitvoeren. In dit scenario wordt het volgende foutbericht weergegeven wanneer u de toepassing uitvoert:
De gegevenstypen ntext en image kunnen niet worden gebruikt in waar, HAVING, GROUP BY, op of IN de componenten, behalve wanneer deze gegevenstypen worden gebruikt in combinatie met dergelijke of predikaten NULL IS.

Oorzaak


Wanneer u parameters voor een query "LINQ-entiteiten" in een toepassing gebruikt, kunt u de databasetypen basis geen opgeven. De provider SQL Server Compact entiteit Framework probeert te maken op basis van de entiteit Model (EDP) facetten van de oorspronkelijke parameter parameter provider-niveau. SQL Server Compact ondersteunt niet het gegevenstype nvarchar(max) of het gegevenstype varbinary(max) . Daarom, wanneer de provider het gegevenstype voor een parameter van het type Edm.String of van het gegevenstype Edm.Binary selecteert, heeft de provider de parameter markeren als een van de volgende gegevenstypen op basis van de EDM facetten van de parameter:
  • Voor een parameter, wordt de provider geselecteerd voor het gegevenstype nvarchar(4000) of het gegevenstype ntext .
  • De provider geselecteerd voor een binaire parameter het gegevenstype varbinary(4000) of het gegevenstype image .
Als de provider is gemarkeerd met de parameter als het gegevenstype nvarchar(4000) of als het gegevenstype varbinary(4000) , treedt een fout op wanneer u probeert waarden die groter dan 8.000 bytes zijn moeten worden ingevoegd. Bovendien, als de provider is gemarkeerd met de parameter als het gegevenstype ntext of als het gegevenstype image , treedt een fout op als u alle bewerkingen van gelijkheid, groepeerbewerkingen of sorteer bewerkingen worden uitgevoerd op de parameter.

Oplossing


Informatie over de hotfix

Een ondersteunde hotfix is beschikbaar bij Microsoft. Deze hotfix is echter alleen bedoeld voor het probleem dat wordt beschreven in dit artikel. Voer deze hotfix alleen uit op systemen waarop de in dit artikel beschreven problemen zich voordoen. Deze hotfix moet wellicht extra worden getest. Als u geen ernstige hinder ondervindt van dit probleem, is het daarom raadzaam te wachten op de volgende update waarin deze hotfix is opgenomen.

Als de hotfix gedownload kan worden, is er een sectie 'Hotfix downloaden' aan het begin van dit Knowledge Base-artikel. Als deze sectie niet wordt weergegeven, neem dan contact op met Microsoft Customer Service and Support om de hotfix te verkrijgen.

Opmerking Als er andere problemen optreden of als probleemoplossing is vereist, moet u wellicht een apart serviceverzoek indienen. De normale ondersteuningskosten gelden voor extra ondersteuningsvragen en problemen die niet in aanmerking komen voor deze specifieke hotfix. Voor een volledige lijst met telefoonnummers van Microsoft Customer Service and Support of een afzonderlijk serviceverzoek maken, gaat u naar de volgende Microsoft-website:Opmerking Het formulier 'Hotfix kan worden gedownload' geeft de talen weer waarvoor de hotfix beschikbaar is. Als uw taal niet wordt weergegeven, is dit omdat een hotfix niet voor die taal beschikbaar is.

Vereisten

Deze hotfix moet u de eerder geïnstalleerde SQL Server Compact 3.5 Service Pack 1 installeren het MSI-bestand dat wordt geleverd met deze hotfix te verwijderen. Als u de eerder geïnstalleerde SQL Server Compact 3.5 Service Pack 1 niet verwijdert, wordt een weergegeven foutbericht waarin wordt gemeld dat er al een nieuwere versie van SQL Server Compact is geïnstalleerd. Voor meer informatie over SQL Server Compact 3.5 Service Pack 1, klikt u op het volgende artikel in de Microsoft Knowledge Base:

Beschrijving van de 955965 van SQL Server Compact 3.5 servicepack 1

Opstartinformatie

U hoeft de computer niet opnieuw op te starten nadat u deze hotfix hebt toegepast.

Informatie over het register

U hoeft niet te wijzigen van het register.

Informatie over hotfixbestanden

Deze hotfix bevat alleen de bestanden die nodig zijn om de problemen verhelpen die in dit artikel worden vermeld. Deze hotfix bevat mogelijk niet alle bestanden die u nodig hebt om een product volledig bij te werken naar de laatste build.

De Engelse versie van deze hotfix heeft de bestandskenmerken (of recentere bestandskenmerken) die in de volgende tabel worden weergegeven. De datums en tijden voor deze bestanden worden weergegeven in Coordinated Universal Time (UTC). Wanneer u de bestandsinformatie weergeeft, wordt deze naar lokale tijd geconverteerd. Om het verschil tussen UTC en lokale tijd op te zoeken, gebruikt u het tabblad tijdzone in het onderdeel datum en tijd in het Configuratiescherm.
BestandsnaamBestandsversieBestandsgrootteDatumTijdPlatform
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

Status


Microsoft heeft bevestigd dat dit probleem kan optreden in de Microsoft-producten die worden vermeld in de sectie 'Van toepassing op'.

Meer informatie


Nadat u deze hotfix hebt toegepast, wordt de voorziening niet het gegevenstype voor een parameter van de EDM raden. String gegevenstype of van de EDM. Binaire gegevenstype. De queryprocessor selecteert het juiste gegevenstype voor de parameter die is gebaseerd op de waarde of de kolom met de parameter is gelijkgesteld of aan de parameter wordt gebruikt.

In de volgende entiteit SQL-query selecteert de queryprocessor u bijvoorbeeld het gegevenstype ntext voor de parameter name voordat u deze hotfix toepast.
String name = "XYZ";var q = from e in nwind.Employees
where e.First_Name = name
select e;

Nadat u deze hotfix hebt toegepast, wordt het gegevenstype van de kolom Voornaam geselecteerd voor de parameter name .

In het volgende voorbeeld mislukt de query "LINQ aan entiteit", omdat de parameter name wordt vergeleken met noch gebruikt in combinatie met een andere waarde of een kolom.
String name = "XYZ";var q = from e in nwind.Employees
select name;

Deze hotfix lost ook een bekend probleem dat wordt beschreven in het Leesmij-bestand voor SQL Server Compact 3.5. Zie het gedeelte "SQL Server Compact 3.5 SP1 Runtime problemen voor de ADO.NET entiteit Framework" van de volgende Microsoft-website voor meer informatie:Deze hotfix lost het probleem met betrekking tot onjuiste Transact-SQL-instructies die worden gegenereerd wanneer de provider scalaire subquery's toe te passen constructies worden geconverteerd.

Opmerking De gecorreleerde subquery's worden intern omgezet naar scalaire subquery's. De gecorreleerde subquery's worden niet ondersteund in deze release. Wanneer u deze query's uitvoert, wordt het volgende foutbericht weergegeven:
Er is een fout opgetreden tijdens het uitvoeren van de definitie van de opdracht. Zie de interne uitzondering voor meer informatie.
De interne uitzondering bevat het volgende bericht:
Er is een fout opgetreden bij het parseren van de query. [.., Fout tokens = AS]
De reden is dat het kader van ADO.NET entiteit de invoer voor de query interpreteert als een query waarop het jointype CROSS APPLY of het jointype OUTER APPLY. Als aan de rechterkant van de join-voorwaarde een scalaire waarde retourneert, wordt de join wordt omgezet in een subquery scalaire. De entiteit Framework van ADO.NET-provider voor SQL Server Compact is dat scalaire subquery converteren naar een equivalente query het type join OUTER APPLY, die wordt ondersteund door SQL Server Compact. Echter, in deze release, deze conversie niet correct gebeurt. Een fout treedt bijvoorbeeld op voor de volgende query in deze release.
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());
}
}

Voor meer informatie over het naamgevingsschema voor SQL Server-updates klikt u op het volgende artikel in de Microsoft Knowledge Base:

822499 Nieuw naamgevingsschema voor Microsoft SQL Server-software-updatepakketten

Voor meer informatie over terminologie voor software-updates klikt u op het volgende artikelnummer om het artikel in de Microsoft Knowledge Base weer te geven:
824684 beschrijving van de standaardterminologie die wordt gebruikt om software-updates voor Microsoft te beschrijven