不能由固定名称
问题描述:
这行代码不能由固定名称
DbProviderFactory factory = DbProviderFactories.GetFactory("Microsoft.SqlServerCe.Client");
解决的SQL Server CE提供者工厂抛出该异常
System.Configuration.ConfigurationErrorsException: 无法找到或加载注册 净框架数据提供者。
虽然我machine.config文件包含以下部分
<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>
我这么想吗?我应该看看其他地方吗?代码像DbProviderFactory factory = SqlCeProviderFactory.Instance
工作正常。
答
还有multiple SQL Server CE installs。 Visual Studio tools提供了服务器资源管理器和设计组件,并将SQL Server CE DLL放置在Visual Studio本地的位置。我需要安装runtime以获取在machine.config文件中注册的数据提供者。
答
在Visual Studio 2012中,默认提供程序名称是System.Data.SqlServerCe.4.0
。
这让我通过名称查找工厂:
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();
注意:任何代码发布到公共领域。无需归属。
我没有任何在Microsoft.*中列出的任何DLL在machine.config部分Sql Server Ce ...我有System.Data.SqlServerCe v9.0.242.0。 – 2009-05-05 14:03:46