Pregunta

Esta línea de código

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

lanza esta excepción

  

System.Configuration.ConfigurationErrorsException:   Error al encontrar o cargar el registrado   .Net Framework Data Provider.

Aunque mi archivo machine.config contiene la siguiente sección

<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>

¿Me estoy perdiendo algo? ¿Debería buscar en otro lado? Código como DbProviderFactory factory = SqlCeProviderFactory.Instance funciona bien.

¿Fue útil?

Solución

Hay múltiples instalaciones de SQL Server CE . Herramientas de Visual Studio proporciona el explorador de servidores y los componentes de diseño y coloca las DLL de SQL Server CE en una ubicación local a Visual Studio. Necesitaba instalar el runtime para obtener el proveedor de datos registrado en el archivo machine.config.

Otros consejos

En Visual Studio 2012, el ProviderName predeterminado es System.Data.SqlServerCe.4.0 .

Esto le permite a me encontrar una fábrica por nombre:

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 : cualquier código se libera al dominio público. No se requiere atribución.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top