string constr =“数据源=(DESCRIPTION =(ADDRESS =(PROTOCOL = tcp)(HOST = spp01)(PORT = 1521))(CONNECT_DATA =(SID = Global)));用户
编号= SYSMAN;密码= testman3" ; string ProviderName =“Oracle.DataAccess.Client”;
DbProviderFactory factory = DbProviderFactories.GetFactory(ProviderName);
我可以在console和winforms应用程序中连接到oracle。上面的代码位于一个单独的类库中。我安装了64位ODAC。
ORACLE.DATAACCESS设置为2.x ver 2.112.3.0。我检查了machine.config条目Framework64 v2.0.50727和v4.0.30319
type =“Oracle.DataAccess.Client.OracleClientFactory,Oracle.DataAccess,Version = 2.112.3.0,Culture = neutral,PublicKeyToken = 89b483f429c47342”/>
CPU =任何CPU框架= 3.5
当我从ASP.net中的类库调用相同的代码时,我得到以下错误
System.ArgumentException未被用户代码处理 Message =无法找到请求的.Net Framework数据提供程序。它可能没有安装。 来源= System.Data 堆栈跟踪: 在System.Data.Common.DbProviderFactories.GetFactory(String providerInvariantName)
我甚至将apppool设置为允许32位应用程序。
如何解决此错误?
答案 0 :(得分:8)
该错误表明您的系统上未安装Oracle客户端。要验证它,您可以运行以下代码行:
<强> System.Data.Common.DbProviderFactories.GetFactoryClasses()强>
您将获得所有已安装数据提供程序的DataTable。如果DataTable中未列出Oracle.DataAccess.Client invarient,则表示未安装。
我在我们的一台客户机上遇到了同样的问题,在调试时我发现Oracle客户端是从Admin用户安装的,他们试图从其他用户那里访问它。
从当前用户安装Oracle客户端可以解决问题。
请不要忘记在安装Oracle客户端后重新启动应用程序。
答案 1 :(得分:1)
您只需要数据提供者。在部署到Windows Server 2008 R2时以及在服务器上安装数据提供程序之后,我遇到了与Oracle 11g相同的问题。虽然我不得不重新启动网络应用程序几次,但没有在第一次拍摄时工作。
要检查服务器上是否有ODAC,只需将此字符串转储到某个地方或您可以看到的任何地方的日志:
private String GetDbProviders()
{
// Retrieve the installed providers and factories.
DataTable table = DbProviderFactories.GetFactoryClasses();
StringBuilder bob = new StringBuilder();
// Display each row and column value.
foreach (DataRow row in table.Rows)
{
foreach (DataColumn column in table.Columns)
{
bob.AppendLine(" "+row[column]+" ");
}
}
return bob.ToString();
}
答案 2 :(得分:0)
卸载64位ODAC并安装32位ODAC。
答案 3 :(得分:0)
这是所有使用Oracle客户端作为数据库的.NET开发人员都会遇到的常见问题之一。