无法找到请求的.NET Framework数据提供程序(machine.config显示正确)

时间:2014-10-11 15:44:40

标签: .net visual-studio-2010 visual-studio-2013

我正在尝试创建一个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文件包含生成的连接字符串,但它是加密的,所以我该如何手动添加?

0 个答案:

没有答案