F#,SqlDataProvider和Oracle

时间:2015-12-14 16:16:20

标签: oracle f# type-providers

如果我这样做,我可以很好地连接到我的数据库

let connection = new Oracle.DataAccess.Client.OracleConnection("User Id=hr;Password=hr;Data Source=localhost")
  connection.Open()

然而,这不起作用

#r "FSharp.Data.SqlProvider"
open FSharp.Data.Sql        
type sql = SqlDataProvider<
             ConnectionString = "User Id=hr;Password=hr;Data Source=localhost",
             DatabaseVendor = Common.DatabaseProviderTypes.ORACLE,
             ResolutionPath = "C:\apps\Oracle\product\12.1.0",
             Owner = "hr">

编译器说:

  

类型提供程序'FSharp.Data.Sql.SqlTypeProvider'报告错误:   类型'System.Collections.Generic.KeyNotFoundException'的异常   被扔了。

我最好的猜测是我的ResolutionPath存在问题。我在这里粘贴的ResolutionPath是我的Oracle客户端。我也尝试了[OracleClient] \ bin的ResolutionPath并得到了相同的结果。

2 个答案:

答案 0 :(得分:3)

Oracle的解析路径应指向Oracle的ODP.NET(Oracle Data Provider for .NET),而不是Oracle 12c的Oracle数据库的通用安装路径。因为从Oracle 11g到12c的Oracle数据库的基本安装不能保证正确地包含ODP.NET安装。此外,ODP.NET安装独立于计算机上的任何Oracle数据库安装。

您可以通过转到Windows的Oracle数据访问(ODAC)页面来下载ODP.NET: http://www.oracle.com/technetwork/topics/dotnet/downloads/index.html

然后下载ODP.NET提供程序以满足您的特定需求,32位或64位。 安装最新的ODP.NET,然后将ResolutionPath指向ODP.NET安装路径,尤其是包含ODP.NET通用DLL的文件夹。

如果您仍有问题,请告诉我。祝你好运!

答案 1 :(得分:0)

The key UserId needs to have a space between "User" and "Id", just like in your working connection string.