FIX"LINQ to Entities"クエリを実行するときにエラー メッセージを使用して、文字列型のパラメーターまたは SQL Server Compact 3.5 データベースに対してバイナリ パラメーター:"の場所、ntext および image データ型を使用することはできません、グループ化、または、in です..。

適用対象: Microsoft SQL Server Compact 3.5

概要


この資料では、この修正プログラムのリリースに関する次について説明します。
  • 修正プログラム パッケージで修正される問題
  • 修正プログラム パッケージをインストールするための前提条件
  • 修正プログラム パッケージをインストールした後にコンピューターを再起動する必要があるかどうか
  • 他の修正プログラム パッケージで修正プログラム パッケージを置換するかどうか
  • かどうか、レジストリの変更を行う必要があります。
  • 修正プログラム パッケージに含まれるファイル

現象


以下の事例で説明します。アプリケーションは、Microsoft SQL Server Compact 3.5 データベースにアクセスするのには Microsoft.NET Framework 3.5 Service Pack 1 に含まれる Microsoft ADO.NET Entity Framework を使用します。アプリケーションでは、文字列パラメーターまたはデータベースに対してバイナリ パラメーターを使用する"LINQ to Entities"クエリを実行します。このシナリオでは、アプリケーションを実行するときに、次のエラー メッセージが表示されます。
Ntext および image データ型は、どこで、HAVING、GROUP BY 句、またはなどでこれらのデータ型を使用する場合を除く、または NULL 述語では使用できません。

原因


アプリケーションでは、「LINQ to Entities」クエリのパラメーターを使用する場合は、基本データベースの種類を指定できません。 しますSQL Server コンパクトな Entity Framework プロバイダーは、元のパラメーター エンティティ データ モデル (EDM) ファセットに基づいて、プロバイダー レベルのパラメーターを作成しようとします。SQL Server Compact は、 nvarchar(max)データ型またはvarbinary(max)データ型です。したがって、プロバイダーは、 Edm.Stringのデータ型またはEdm.Binaryデータ型のパラメーターのデータ型を選択すると、EDM のファセットのパラメーターに基づいて、次のデータ型の 1 つとして、パラメーターをマークするのにはプロバイダーがあります。
  • 文字列パラメーターでは、プロバイダーは、 nvarchar(4000)データ型またはntextデータ型を選択します。
  • バイナリ パラメーターでは、プロバイダーは、 varbinary(4000)データ型またはimageデータ型を選択します。
プロバイダーは、 nvarchar(4000)データ型、またはvarbinary(4000)データ型として、パラメーターをマーク、8,000 バイトを超える値を挿入しようとするときにエラーが発生します。 さらに、プロバイダーは、 ntextデータ型、またはimageデータ型としてパラメーターを示す、エラーが発生パラメーターに対して、等値演算、グループ化、または並べ替え操作を実行している場合。

解決策


修正プログラムの情報

サポートされている修正プログラムは、マイクロソフトから入手可能です。ただし、この修正プログラムは、ここで説明する問題のみを修正することを目的としたものです。この修正プログラムは、この資料に記載された問題があったシステムのみに対して適用してください。この修正プログラムは、今後さらにテストを行う場合があります。したがって、この問題の影響が深刻でない場合は、この修正プログラムが含まれる次のソフトウェア更新プログラムがリリースされるまで待つことをお勧めします。

修正プログラムをダウンロードできる場合は、このサポート技術情報の資料の上部に「修正プログラムのダウンロード」セクションがあります。このセクションが表示されていない場合は、マイクロソフト カスタマー サービス サポートにお問い合わせのうえ、修正プログラムを入手してください。

注: さらなる問題が発生した場合、またはトラブルシューティングが必要な場合には、別のサービス リクエストの作成が必要な場合があります。この修正プログラムの対象外の追加の質問および問題については、通常のサポート料金が適用されます。マイクロソフト カスタマー サービス サポートの電話番号一覧または別のサービス リクエストの作成については、次のマイクロソフト Web サイトを参照してください。注: [修正プログラムのダウンロード] フォームには、修正プログラムが提供されている言語が表示されます。お使いの言語が表示されない場合は、その言語の修正プログラムが利用できないためです。

必要条件

この修正プログラムを適用するには、以前にインストールされた SQL Server コンパクトな 3.5 Service Pack 1 をこの修正プログラムに含まれている .msi ファイルをインストールをアンインストールしてください。以前にインストールされた SQL Server Compact 3.5 Service Pack 1 をアンインストールしない場合、SQL Server Compact の以降のバージョンが既にインストールされていることを示すインストール エラー メッセージが表示されます。SQL Server のコンパクトな 3.5 Service Pack 1 の詳細については、マイクロソフト サポート技術情報の記事を表示するのには次の資料番号をクリックします:

SQL Server Compact 3.5 サービス パック 1 の955965の説明

再起動に関する情報

この修正プログラムの適用後にコンピュータを再起動する必要はありません。

レジストリ情報

レジストリを変更する必要はありません。

修正プログラム ファイルの情報

この修正プログラムには、この資料に記載されている問題を修正するために必要なファイルのみが含まれています。この修正プログラムには、製品を最新のビルドに更新するために必要なすべてのファイルが含まれていない可能性があります。

修正プログラム (英語版) のファイル属性は次表のとおりです。ただし、これより新しい修正プログラムがリリースされている可能性もあります。各ファイルの日付および時刻は、世界協定時刻 (UTC) で示されています。ファイル情報に表示される時刻は、ローカル時刻に変換されています。UTC とローカル時刻との時差を確認するには、コントロール パネルの [日付と時刻] の [タイム ゾーン] タブを使用してください。
ファイル名ファイル バージョンファイル サイズ日付時刻プラットフォーム
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

状況


マイクロソフトは、この問題を「対象製品」セクションに記載されているマイクロソフト製品の問題として認識しています。

詳細


この修正プログラムを適用すると、プロバイダーはEDM のパラメーターのデータ型を推測できません。文字列データ型または EDM ののです。バイナリデータ型です。クエリ プロセッサでは、値またはパラメーターが関連づけられているか、パラメーターが使用されると、列に基づいて、パラメーターの正しいデータ型を選択します。

たとえば、次のエンティティの SQL クエリでは、クエリ プロセッサ選択ntextデータ型パラメーターのこの修正プログラムを適用する前にします。
String name = "XYZ";var q = from e in nwind.Employees
where e.First_Name = name
select e;

この修正プログラムを適用すると、 nameパラメーターと名前の列のデータ型が選択されます。

ただし、次の例では、「LINQ をエンティティ」クエリが失敗したnameパラメーターがに関連づけられている他の値または列で使用されるためです。
String name = "XYZ";var q = from e in nwind.Employees
select name;

この修正プログラムは、SQL Server Compact 3.5 のリリース ノートのドキュメントに記載されている既知の問題も解決されます。 詳細については、次のマイクロソフト Web サイトの「SQL Server Compact 3.5 SP1 ランタイム問題の ADO.NET Entity Framework」セクションを参照してください。この修正プログラムでは、プロバイダーが構成要素に適用するスカラー サブクエリに変換するときに生成される不正な Transact SQL ステートメントに関連する問題を解決します。

注: 相関サブクエリはスカラー サブクエリに内部的に変換されます。相関サブクエリは、このリリースではサポートされていません。これらのクエリを実行すると、次のエラー メッセージが表示されます。
コマンド定義の実行中にエラーが発生しました。詳細については、内部例外を参照してください。
内部例外には、次のメッセージが含まれています。
クエリを解析中にエラーが発生しました。[..、エラーがあるトークン = AS]
理由は、ADO.NET Entity Framework が適用間の結合の種類や適用の外部結合の種類を含むクエリとしてクエリを入力を解釈します。結合条件の右側には、スカラー値が返された場合は、結合がスカラー サブクエリに変換されます。そのスカラー副問い合わせを適用の外部結合の種類がサポートしている SQL Server Compact には、同等のクエリに変換するのには、SQL Server Compact の ADO.NET Entity Framework プロバイダーがあります。ただし、このリリースでは、この変換は行われません正しく。たとえば、このリリースでは、次のクエリにエラーが発生しました。
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 の更新プログラムの名前付けスキーマの詳細については、マイクロソフト サポート技術情報の資料を参照するのには次の資料番号をクリックします。

更新プログラム パッケージの新しい名前付けスキーマを Microsoft SQL Server ソフトウェアの822499

ソフトウェア更新プログラムの用語の詳細については、次の文書番号をクリックして、マイクロソフト サポート技術情報の資料を参照してください。
824684マイクロソフトのソフトウェア更新プログラムを記述するために使用される一般的な用語説明