Domanda

Questa riga di codice

DbProviderFactory factory = DbProviderFactories.GetFactory("Microsoft.SqlServerCe.Client");

genera questa eccezione

  

System.Configuration.ConfigurationErrorsException:   Impossibile trovare o caricare la registrazione   .Net Framework Data Provider.

Sebbene il mio file machine.config contenga la seguente sezione

<system.data>
  <DbProviderFactories>
    <add name="OracleClient Data Provider" invariant="System.Data.OracleClient" description=".Net Framework Data Provider for Oracle" type="System.Data.OracleClient.OracleClientFactory, System.Data.OracleClient, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
    <add name="SqlClient Data Provider" invariant="System.Data.SqlClient" description=".Net Framework Data Provider for SqlServer" type="System.Data.SqlClient.SqlClientFactory, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
    <add name="SQL Server CE Data Provider" invariant="Microsoft.SqlServerCe.Client" description=".NET Framework Data Provider for Microsoft SQL Server 2005 Compact Edition" type="Microsoft.SqlServerCe.Client.SqlCeClientFactory, Microsoft.SqlServerCe.Client, Version=9.0.242.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" />
  </DbProviderFactories>
</system.data>

Mi sto perdendo qualcosa? Dovrei cercare altrove? Codice come DbProviderFactory factory = SqlCeProviderFactory.Instance funziona bene.

È stato utile?

Soluzione

Esistono più installazioni di SQL Server CE . Gli Strumenti di Visual Studio fornisce i componenti di progettazione e di esplorazione dei server e posiziona le DLL di SQL Server CE in una posizione locale in Visual Studio. Ho dovuto installare il runtime per ottenere il fornitore di dati registrato nel file machine.config.

Altri suggerimenti

In Visual Studio 2012, il ProviderName predefinito è System.Data.SqlServerCe.4.0 .

Questo permette a me di trovare una fabbrica per nome:

String providerName = "System.Data.SqlServerCe.4.0";

DbProviderFactory factory = DbProviderFactories.GetFactory(providerName);
if (factory == null)
   throw new Exception("Unable to locate factory for " + providerName);

DbConnection conn = factory.CreateConnection();
conn.ConnectionString = connectionString;
conn.Open();
  

Nota : qualsiasi codice viene rilasciato nel dominio pubblico. Nessuna attribuzione richiesta.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top