2016-06-19 3 views
4

SQLProvider을 통해 SQLite 데이터베이스에 액세스하고 있습니다. 실제로 데이터베이스에 연결하고 테이블의 데이터를 쿼리 할 수 ​​있습니다. 그러나 유형 공급자가 오류 : Exception has been thrown by a target of an invocation을 표시합니다. 그리고 인텔리 센스는 실제로 작동하지 않습니다. 테이블 또는 특성이 표시되지 않습니다. 스크린 샷을 참조하십시오에 액세스 할 수 없습니다 VS 표시 테이블과 유형부터SQLite 데이터베이스에 액세스 할 때 SqlTypeProvider 오류

Type Provider Error

이 속성을 (그것이 비록 작동 하는가)에 액세스하려고 lookup on object of indeterminate type 오류를 보여줍니다. 테이블에서 데이터를 추출해도 작동합니다. 따라서 유형 공급자는 데이터베이스에 액세스 할 수 있지만 이러한 오류를 표시합니다. 오류없이 DB를 올바르게 인식하고 속성에 액세스하는 방법이 있습니까?

64 비트 SQLite 드라이버를 사용하고 있습니다. 여기에 코드입니다 :

#if INTERACTIVE 
#r @"..\packages\SQLProvider.1.0.8\lib\FSharp.Data.SqlProvider.dll" 
#r @"..\packages\System.Data.SQLite.Core.1.0.101.0\lib\net46\System.Data.SQLite.dll" 
#r @"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6\System.Data.Linq.dll" 
#endif 

open System 
open FSharp.Data.Sql 

[<Literal>] 
let connectionString = "Data Source="+ @"C:\tmp\databaseFile.db3" 
[<Literal>] 
let resolutionPath = __SOURCE_DIRECTORY__ + @"..\..\packages\System.Data.SQLite.Core.1.0.101.0\lib\net46" 

type sql = SqlDataProvider< 
       Common.DatabaseProviderTypes.SQLITE, 
       ConnectionString = connectionString, 
       ResolutionPath = resolutionPath, 
       CaseSensitivityChange = Common.CaseSensitivityChange.ORIGINAL 
       > 

let ctx = sql.GetDataContext() 

let table2 = ctx.Main.Table2 //DateTime 
let table3 = ctx.Main.Table3 //Text 

query {           
     for r in table3 do 
      select (r.Date1)         
      } |> Seq.toList 

query {           
     for r in table2 do 
      select (r.Date1)         
      } |> Seq.toList 

답변

2

이 작동 현재 SQLite는과 SQLTypeProvider (1.0.102.0 각각 1.0.31)에 의도 한대로이이 issue #196 함께 할 수있는 뭔가가 있었다 수도

#if INTERACTIVE 
#I @"..\packages\SQLProvider.1.0.31\lib" 
#r "FSharp.Data.SqlProvider.dll" 
#I @"..\packages\System.Data.SQLite.Core.1.0.102.0\lib\net46" 
#r "System.Data.SQLite.dll" 
#I @"..\packages\System.Data.SQLite.Linq.1.0.102.0\lib\net46" 
#r "System.Data.SQLite.Linq.dll" 
#endif 

open System 
open FSharp.Data.Sql 
//open System.Data.SQLite 
//open System.Data.SQLite.Linq 

[<Literal>] 
let connectionString = "Data Source="+ @"C:\tmp\databaseFile.db3" 
[<Literal>] 
let resolutionPath = __SOURCE_DIRECTORY__ + @"..\..\packages\System.Data.SQLite.Core.1.0.102.0\lib\net46" 

type sql = SqlDataProvider< 
       Common.DatabaseProviderTypes.SQLITE, 
       connectionString, 
       ResolutionPath = resolutionPath, 
       CaseSensitivityChange = Common.CaseSensitivityChange.ORIGINAL> 

let ctx = sql.GetDataContext() 

let table2 = ctx.Main.Table2 //DateTime 
let table3 = ctx.Main.Table3 //Text 

.