2013-10-09 1 views
2

F # 3.0 프로그래밍 언어의 새로운 기능인 유형 공급자를 사용하고 싶습니다. F # 3.0 유형 공급자 SqlDataConnection을 사용하는 로컬 컴퓨터에서 Microsoft Access 데이터베이스 .mdb에 연결하려고 시도했지만 형식 공급자가 "키워드가 지원되지 않습니다 : '공급자'"오류를보고하고 데이터베이스에 연결하지 못했습니다. 데이터베이스에 비밀번호가 없습니다.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에 대한 연결을 지원하는 형식 공급자가 있습니까?

+0

대신'SqlClient' 및/또는'SqlDataConnection'을 사용하는 대신'OleDbClient' 및/또는'OleDbConnection'을 사용해야합니까? 'Sql ... '은 SQL Server에만 해당 될 수 있습니다. –

+0

SqlDataConnection은 SQL Server에 대해서만 형식 공급자입니다. http://msdn.microsoft.com/en-us/library/hh362320.aspx Access 용 형식 공급자가 있는지 여부를 알 수 없습니다. – Alexan

답변

3

질문에 대한 제 의견에서 제안한 것처럼 OleDbConnection 및 관련 개체를 사용해야한다고 생각합니다. 도움이 될만한 몇 가지 샘플 코드가있는 또 다른 질문이 있습니다 (here).

+0

유용한 코드에 대한 제안과 하이퍼 링크를 가져 주셔서 감사합니다. 하지만 OleDbConnection 클래스 대신 새로운 언어 기능 (형식 공급자)을 사용하려고했습니다. 마이크로 소프트가 다른 제품 (F #)에서 자신의 소프트웨어 제품 (MS Access)을 적절히 지원하지 못하는 것 같으며 프로그래밍 언어는 유형 공급자가있는 MS Access 데이터베이스에 대한 연결을 지원하지 않습니다. MS Access 데이터베이스 (.mdb) 작업을위한 유형 공급자를 어디에서 다운로드 할 수 있는지 알고 있습니까? –

+0

@AlekseyOdeychuk 죄송합니다. 아니요, 그런 유형의 제공자를 모르겠습니다. 저는 LINQ 초창기에 다른 많은 데이터베이스 플랫폼을 지원하기 위해 SQL Server를 넘어서 확장 될 것이라는 희망을 갖고있었습니다.하지만 대부분의 경우 이러한 일이 발생하지 않았습니다. –

+0

오늘 OleDb 유형 공급자가 없습니다. 유용하다고 생각되면 저작물을 조사하여 FSharp.Data (http://tpetricek.github.io/FSharp.Data/) 또는 FSharpX (https://github.com/fsharp)에 추가해야합니다./fsharpx). Microsoft는 말 그대로 수백 가지의 기술과 API를 개발 및/또는 지원하며 분명히 Microsoft에서 지원하는 F # 유형 공급자가있을 수 없습니다. 기존 표준 OleDb API를 기꺼이 사용하지 않는 F # OleDb 사용자는 매우 작은 시장입니다. :) – latkin

2

로컬 액세스 인스턴스에 F # 응용 프로그램을 연결했는데 직접 ODBC를 사용하는 것이 더 빠르고 쉽습니다. 나는 내 코드의 gist을 넣어했지만이 두드러진 부분이 특정 경우

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는 그 목적을 잘 수행합니다.

관련 문제