我正在尝试创建一个SQL CLR项目(对于SQL Server 2008 R2),并获得“无法找到所请求的.NET Framework数据提供程序”。
我花了一个多小时在谷歌搜索解决方案,而且大多数似乎是在machine.config文件中有一个额外的自终止条目或缺少“SqlClient数据提供程序”,但我检查并处理了所有那,但仍然得到相同的消息
作为测试,我创建了一个新项目,并尝试使用数据源配置向导添加连接 - 同样的问题。请注意,我通常从不使用Visual Studio向导进行连接(我的数据访问层可以处理代码中的所有内容) - 因此这个问题可能已存在很长时间了。与VS 2010和VS 2013相同的问题。项目框架版本:.NET 3.5。试过CPU Any和x86。
作为测试,我简化了我可以找到的所有machine.config文件的DbProviderFactories部分(删除Oracle,SQL CE等):
<system.data>
<DbProviderFactories>
<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"/>
</DbProviderFactories>
</system.data>
这些是我的machine.config文件
C:\Windows\Microsoft.NET\Framework\v2.0.50727\CONFIG\machine.config
C:\Windows\Microsoft.NET\Framework\v4.0.30319\Config\machine.config
C:\Windows\Microsoft.NET\Framework64\v2.0.50727\CONFIG\machine.config
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Config\machine.config
连接字符串:
Data Source=x.x.x.x;Initial Catalog=SomeDB;Persist Security Info=True;User ID=sa
仍然没有去!
请注意,此时连接字符串似乎并不重要 - 它甚至不足以尝试连接(框架数据提供程序错误立即出现)。
需要帮助调试并解决此问题。
修改10/11/2014
根据VDohnal提到的文章,我做了这个简单的测试:
try
{
string provider = "System.Data.SqlClient";
DbProviderFactories.GetFactory(provider);
Console.WriteLine("{0} created...\n", provider);
var dt = DbProviderFactories.GetFactoryClasses();
for (int i = 0; i < dt.Rows.Count; i++)
Console.WriteLine("{0}: {1}", i, dt.Rows[i][2]);
}
catch (Exception ex)
{
Console.WriteLine(ex);
}
创建提供程序时没有问题,其次是我的提供程序:
System.Data.SqlClient created...
0: System.Data.Odbc
1: System.Data.OleDb
2: System.Data.OracleClient
3: System.Data.SqlClient
4: Devart.Data.MySql
5: System.Data.SqlServerCe.4.0
请注意,我添加了原始的DbProviderFactories条目,因为这部分正在运行。此外,使用的确切machine.config文件是:C:\ Windows \ Microsoft.NET \ Framework \ v2.0.50727 \ CONFIG \ machine.config
但是向导仍然失败并显示相同的错误消息。
作为一种解决方法,有没有办法在不使用数据库连接向导的情况下创建CLR项目?我知道somename.sqlproj.user文件包含生成的连接字符串,但它是加密的,所以我该如何手动添加?