2

我想使用 F# 3.0 编程语言的一个新特性:类型提供程序。我尝试使用 F# 3.0 类型提供程序 SqlDataConnection 连接到本地计算机上的 Microsoft Access 数据库 .mdb,但类型提供程序报告错误:“不支持关键字:‘提供程序’”并且无法连接到数据库。数据库没有密码。

我的 F# 代码是:

open System
open Microsoft.FSharp.Data.TypeProviders 
open System.Data.Linq.SqlClient
open System.Linq
open Microsoft.FSharp.Linq

// I found the connection string in database properties in the Server Explorer window 
// in Visual Studio 2012 
[<Literal>] 
let conn = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=d:\FM Access\FM Day.mdb;" 
type schema = SqlDataConnection<conn>

请帮我解决那个类型提供程序的问题。我的连接字符串有什么问题?或者也许我需要另一个类型的提供者?是否有任何类型提供程序支持连接到 F# 3.0 中的 Microsoft Access 数据库 .mdb?

4

2 回答 2

3

正如我对该问题的评论中所建议的那样,我认为您需要使用OleDbConnection和相关的对象。这里还有另一个问题,一些示例代码可能会有所帮助。

于 2013-10-09T13:19:39.440 回答
2

无论如何,我将 F# 应用程序连接到本地 Access 实例,使用直接 ODBC 更快、更容易。我已经提出了我的代码要点,但这是最重要的部分:

open System
open System.Data.Odbc


let connectToAccess filename =
    let connectionString = "Provider=Microsoft.Jet.OLEDB.4.0;FileDSN=" + filename + ";User Id=admin;Password=;"
    new OdbcConnection(connectionString)

let connectToDb() =
    let userProfileDir = Environment.GetEnvironmentVariable("UserProfile")
    let accessFile = userProfileDir + @"\Documents\FortuneCookie.accdb"
    connectToAccess accessFile

在这种特殊情况下,我认为类型提供者可能付出的努力多于其价值。同样是 OleDB。ODBC 可以很好地达到目的。

于 2013-10-10T12:59:17.343 回答