1

SQL Server CE データベース内のデータにアクセスする wpf アプリケーションがあります。アプリケーションとデータベースは、インストールせずに PC 上で実行することを意図していますが、実行しようとすると失敗します。(db プロバイダーが見つからない) 次の手順を実行しました。

  • System.Data.SqlServerCE-> ローカルにコピー
  • 7 つの SQL Server CE アセンブリをアプリケーション ディレクトリにコピーしました
  • VC++ がシステムで利用可能であることを確認しました
  • に続いて追加app.config

    <system.data>
      <DbProviderFactories>
        <remove invariant="System.Data.SqlServerCe.4.0" />
        <add name="Microsoft SQL Server Compact Data Provider 4.0" 
             invariant="System.Data.SqlServerCe.4.0" 
             description=".NET Framework Data Provider for Microsoft SQL Server Compact" 
             type="System.Data.SqlServerCe.SqlCeProviderFactory, System.Data.SqlServerCe, Version=4.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" />
      </DbProviderFactories>                          
    </system.data>
    

次のコードの実行を試みた場合:

  try
  {
    MessageBox.Show("initialize db connection");
    context = new DataAccess.PersistentStorageEntities();
    MessageBox.Show(context.Database.Connection.ConnectionString);
  }
  catch (Exception ex)
  {
    MessageBox.Show("exception: "+ex.Message);
    if (ex.InnerException != null)
    {
      MessageBox.Show("innerexception: "+ ex.InnerException.Message);  
    }
  }

メッセージが表示されます:

例外: は有効な Win32 アプリケーションではありません。(HRESULT からの例外: 0x800700C1)

のロードに問題System.Data.SqlServerCe.4.0があると思われますが、Win32 としてロードしようとする理由がわかりません。

何かご意見は?ここで気が狂いそうな気がする

4

1 に答える 1

1

1: Private フォルダーの System.Data.SqlServerCe dll (および同じフォルダーの System.Data.SqlServerCe.Entity.dll dll) を使用する必要があります。

2: x86 および AMD64 フォルダーをプロジェクトに追加し、必要なファイル (プライベート VC++ ランタイム フォルダーを含む) をそれぞれに含める必要があります (Private フォルダーなど)。すべてのファイルをコンテンツとして含めるようにしてください

3: config 参照をバージョン 4.0.0.1 に変更する必要があります

詳細については、私のブログを参照してください。

于 2013-02-07T07:41:34.293 に答える