Poprawka: Komunikat o błędzie podczas uruchamiania kwerendy "LINQ to podmioty", która używa parametru ciąg lub parametr binarnych w bazie danych programu SQL Server Compact 3.5: "nie można używać typów danych ntext i image w warunku WHERE, HAVING, GROUP BY, na lub w...

Dotyczy: Microsoft SQL Server Compact 3.5

Streszczenie


W tym artykule opisano następujące o tym wydaniu poprawek:
  • Problemy rozwiązane przez pakiet poprawek
  • Wymagania wstępne dotyczące instalacji pakietu poprawek
  • Czy należy ponownie uruchomić komputer po zainstalowaniu pakietu poprawki
  • Czy pakiet poprawek jest zastępowany przez inny pakiet poprawek
  • Czy należy wprowadzać jakiekolwiek zmiany w rejestrze
  • Pliki, które są zawarte w pakiecie poprawek

Objawy


Rozważmy następujący scenariusz. Aplikacja używa typu Microsoft ADO.NET Entity Framework, które jest zawarte w Microsoft.NET Framework 3.5 z dodatkiem Service Pack 1 do dostępu do bazy danych Microsoft SQL Server Compact 3.5. We wniosku możesz uruchomić kwerendę "LINQ to podmioty", która wykorzystuje ciąg parametru lub parametr binarnych w bazie danych. W tym scenariuszu pojawić następujący komunikat o błędzie podczas uruchamiania aplikacji:
Nie można użyć typów danych ntext i image w gdzie, HAVING, GROUP BY, na lub w klauzulach, z wyjątkiem, gdy te typy danych są używane z PODOBNYCH lub jest NULL predykatów.

Przyczyna


Gdy używane są parametry dla kwerendy "LINQ to podmioty" w aplikacji, nie można określić typy podstawowej bazy danych. Dostawca programu SQL Server Compact Entity Framework próbuje utworzyć parametr dostawca poziom oparte na aspekty modelu danych jednostki (EDM) oryginalnego parametru. SQL Server Compact nie obsługuje typu danych typu nvarchar(max) lub varbinary(max) typ danych. W związku z tym gdy dostawca wybierze typ danych dla parametru typu danych Edm.String lub Edm.Binary typu danych, dostawca musi oznaczyć parametr jako jeden z następujących typów danych oparte na aspekty EDM parametru:
  • Dla parametru ciąg dostawca wybiera nvarchar(4000) typ danych lub typu danych ntext .
  • Dla parametru binarnym dostawca wybiera typ danych varbinary(4000) lub typ danych obrazu .
Jeśli dostawca oznaczy parametr jako nvarchar(4000) typ danych lub typ danych varbinary(4000) , błąd występuje podczas próby wstawienia wartości, które są większe niż 8000 bajtów. Ponadto jeśli dostawca oznaczy jako typu danych ntext lub image typ danych parametru, błąd występuje, jeśli na parametr Trwa wykonywanie wszelkich operacji równości, operacji grupowania lub operacje sortowania.

Rozwiązanie


Informacje o poprawce

Obsługiwana poprawka jest udostępniana przez firmę Microsoft. Jednak ta poprawka jest przeznaczona tylko do usunięcia problemu opisanego w tym artykule. Zastosuj poprawkę tylko w systemach, w których występuje problem opisany w tym artykule. Ta poprawka może być wciąż w fazie testowania. Jeśli dany system nie jest poważnie narażony na ten problem, firma Microsoft zaleca, aby poczekać na następną aktualizację oprogramowania zawierającą tę poprawkę.

Jeśli poprawka jest dostępna do pobrania, pojawi się sekcja "Poprawka dostępna do pobrania" na początku tego artykułu z bazy wiedzy Knowledge Base. Jeśli nie ma tej sekcji, skontaktuj się z Obsługą i Wsparciem Klienta Microsoft w celu uzyskania poprawki.

Uwaga Jeśli wystąpią dodatkowe błędy lub konieczność rozwiązania problemu, być może trzeba będzie utworzyć osobne zlecenie usługi. Zwykłe koszty obsługi będą zastosowane do dodatkowych pytań i problemów, których nie można rozwiązać przy użyciu określonej poprawki. Aby uzyskać pełną listę numerów telefonów pomocy technicznej i obsługi klienta firmy Microsoft lub utworzyć osobne zlecenie usługi, odwiedź następującą witrynę firmy Microsoft w sieci Web:Uwaga "Poprawka dostępna do pobrania" zawiera listę języków, dla których dostępna jest poprawka. Jeśli odpowiedni język nie jest widoczny, to dlatego, że poprawka nie jest dostępna dla danego języka.

Wymagania wstępne

Aby zastosować tę poprawkę, należy odinstalować poprzednio zainstalowanego programu SQL Server Compact 3.5 Service Pack 1 zainstalować plik msi, który jest dostarczony z tej poprawki. Jeśli poprzednio zainstalowanego programu SQL Server Compact 3.5 Service Pack 1 nie należy odinstalowywać, zostanie wyświetlony komunikat o błędzie instalacji, który stanowi, że już jest zainstalowana nowsza wersja programu SQL Server Compact. Aby uzyskać więcej informacji na temat SQL Server Compact 3.5 z dodatkiem Service Pack 1, kliknij następujący numer artykułu w celu wyświetlenia tego artykułu z bazy wiedzy Microsoft Knowledge Base:

955965 opis programu SQL Server Compact 3.5 z dodatkiem Service Pack 1

Informacje dotyczące ponownego uruchamiania

Nie musisz ponownie uruchomiać komputera po zastosowaniu tej poprawki.

Informacje dotyczące rejestru

Nie masz zmiany w rejestrze.

Informacje o plikach poprawki

Ta poprawka zawiera tylko te pliki, które są wymagane do rozwiązania problemów wymienionych w tym artykule zamieszczono listę. Ta poprawka może nie zawierać wszystkich plików, które są niezbędne do pełnej aktualizacji produktu do nowszej kompilacji.

Wersja anglojęzyczna tej poprawki ma atrybuty plików (lub nowsze) wymienione w poniższej tabeli. Daty i godziny odpowiadające tym plikom zostały podane w formacie uniwersalnego czasu koordynowanego (UTC, Coordinated Universal Time). Po wyświetleniu informacji o pliku są konwertowane na czas lokalny. Aby zobaczyć różnicę między czasem UTC i czasem lokalnym, należy użyć z karty Strefa czasowa w aplecie Data i godzina w Panelu sterowania.
Nazwa plikuWersja plikuRozmiar plikuDataGodzinaPlatforma
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

Stan


Firma Microsoft potwierdziła, że jest to problem występujący w produktach firmy Microsoft wymienionych w sekcji „Dotyczy”.

Więcej informacji


Po zastosowaniu tej poprawki, dostawca nie odgadnąć typ danych dla parametru EDM. Ciąg typ danych lub EDM. Binarne typu danych. Procesor kwerend wybiera poprawny typ danych dla parametru na podstawie wartości lub kolumny jest równa parametru lub jest używany parametr.

Na przykład w następującej kwerendzie SQL jednostki, procesor kwerend wybiera ntext typ danych dla parametru Nazwa przed zastosowaniem tej poprawki.
String name = "XYZ";var q = from e in nwind.Employees
where e.First_Name = name
select e;

Po zastosowaniu tej poprawki, typ danych kolumny Imię zaznaczono parametr name .

Jednak w poniższym przykładzie kwerenda "LINQ do jednostki" nie działa, ponieważ parametr name jest równa ani używane z dowolną wartością lub kolumny.
String name = "XYZ";var q = from e in nwind.Employees
select name;

Ta poprawka rozwiązuje również znany problem, który jest opisany w dokumencie readme dla SQL Server Compact 3.5. Aby uzyskać więcej informacji zobacz sekcję "SQL Server Compact 3.5 z dodatkiem SP1 Runtime problemów dla ADO.NET Entity Framework" w następującej witrynie firmy Microsoft w sieci Web:Ta poprawka rozwiązuje problem, który jest powiązany z niepoprawne instrukcji języka Transact-SQL, które są generowane, gdy dostawca konwertuje podzapytań skalarnych, aby zastosować konstrukcje.

Uwaga Podkwerendy skorelowanych są konwertowane na podzapytań skalarnych wewnętrznie. Skorelowanych podkwerend nie są obsługiwane w tej wersji. Po uruchomieniu tych kwerend, pojawi się następujący komunikat o błędzie:
Wystąpił błąd podczas wykonywania polecenia definicji. Zobacz wyjątek wewnętrzny, aby uzyskać szczegółowe informacje.
Wyjątek wewnętrzny zawiera następujący komunikat:
Wystąpił błąd podczas analizy kwerendy. [.., Token błędu = AS]
Dlatego, że ADO.NET Entity Framework interpretuje wejściowych kwerendy jako kwerendy, która ma typ sprzężenia granic ZASTOSOWAĆ lub typ sprzężenia zewnętrznego zastosowania. Jeśli po prawej stronie warunku sprzężenia zwraca wartość skalarną, sprzężenie jest konwertowany na skalarnym podzapytaniem. Aby przekonwertować ten skalarnym podzapytaniem równoważne kwerendy, która ma typ sprzężenia zewnętrznego zastosowania, który jest obsługiwany przez program SQL Server Compact ma dostawcy ADO.NET Entity Framework dla programu SQL Server Compact. Jednakże w tym wydaniu ta konwersja nie odbywa się prawidłowo. Na przykład wystąpi błąd dla następującej kwerendy w tej wersji.
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());
}
}

Aby uzyskać więcej informacji na temat schematu nazewnictwa dla aktualizacji programu SQL Server kliknij następujący numer artykułu w celu wyświetlenia tego artykułu z bazy wiedzy Microsoft Knowledge Base:

Pakiety aktualizacji 822499 nowy schemat nazewnictwa dla oprogramowania Microsoft SQL Server

Aby uzyskać więcej informacji dotyczących terminologii aktualizacji oprogramowania, kliknij następujący numer artykułu w celu wyświetlenia tego artykułu z bazy wiedzy Microsoft Knowledge Base:
824684 Opis standardowej terminologii używanej do opisywania aktualizacji oprogramowania firmy Microsoft