F# 从Visual Studio加载64位通用ODBC类型提供程序

F# 从Visual Studio加载64位通用ODBC类型提供程序,f#,odbc,64-bit,visual-studio-2019,type-providers,F#,Odbc,64 Bit,Visual Studio 2019,Type Providers,我有最新的VisualStudio20019,我正在构建一个.NETFramework 4.8控制台应用程序 我已经安装了SQL Provider nuget包,并尝试使用一个64位的odbc驱动程序,如下所示 我在F#项目属性中将x64设置为平台,如下所示 但是当我输入经典代码时 open FSharp.Data.Sql [<Literal>] let dnsConn = @"DSN=foo" type db = SqlDataProvider<C

我有最新的VisualStudio20019,我正在构建一个.NETFramework 4.8控制台应用程序

我已经安装了SQL Provider nuget包,并尝试使用一个64位的odbc驱动程序,如下所示

我在F#项目属性中将
x64
设置为平台,如下所示

但是当我输入经典代码时

open FSharp.Data.Sql 
[<Literal>] 
let dnsConn = @"DSN=foo" 
type db = SqlDataProvider<Common.DatabaseProviderTypes.ODBC, dnsConn>
let ctx = db.GetDataContext()
编辑器中有一条红色的曲线,如下图所示。

我试着做的 我已经通过使用传统C#代码实现等效访问来检查DSN是否正常

一切都很好。 我还在github上打开了一个网站,他们建议

试试VS代码,我认为默认情况下它在64位上运行FSI/FSC

事实上,我已经尝试了VS2019的开发者命令提示符下的
fsianycpu
,下面的命令没有抛出任何错误

- type db = SqlDataProvider<Common.DatabaseProviderTypes.ODBC, dnsConn>;;
type db = SqlDataProvider<...>
快速回顾情况 我使用的是Win10 64位,我使用的是VS2019和.NET Framework,和/或VS代码和.NET Core。 请注意,使用纯odbc连接,命令和数据读取器(下面的代码)VS2019和VS代码都可以正常构建和运行,在编译和运行时odbc没有任何问题

let conn = new OdbcConnection(dnsConn)
conn.Open()
let cmd = new OdbcCommand(sql, conn)
let DR = cmd.ExecuteReader()
while (DR.Read()) do
所以只有当我引入

type db = SqlDataProvider<Common.DatabaseProviderTypes.ODBC, dnsConn> `
type db=SqlDataProvider`

就Visual Studio和.NET Framework而言,归根结底,Visual Studio 2019仍然是一款32位应用程序

因此,我还安装了32位版本的特定odbc驱动程序,并配置了
myDSN32
(仅用于本地开发目的)

然后,我能够通过64位odbc驱动程序实际打开连接,正如我在新的Windows 64位堆栈上时所期望的那样,通过以下方式:

open System.Data
open FSharp.Data.Sql
[<Literal>] 
let dnsConn = @"DSN=MyDSN32" 
type db = SqlDataProvider<Common.DatabaseProviderTypes.ODBC, dnsConn>


[<EntryPoint>]
let main argv =
    let ctx = db.GetDataContext("DSN=MyDSN64")
opensystem.Data
打开FSharp.Data.Sql
[] 
设dnsConn=@“DSN=MyDSN32”
类型db=SqlDataProvider
[]
让主argv=
让ctx=db.GetDataContext(“DSN=MyDSN64”)

就Visual Studio和.NET Framework而言,归根结底,Visual Studio 2019仍然是一款32位应用程序

因此,我还安装了32位版本的特定odbc驱动程序,并配置了
myDSN32
(仅用于本地开发目的)

然后,我能够通过64位odbc驱动程序实际打开连接,正如我在新的Windows 64位堆栈上时所期望的那样,通过以下方式:

open System.Data
open FSharp.Data.Sql
[<Literal>] 
let dnsConn = @"DSN=MyDSN32" 
type db = SqlDataProvider<Common.DatabaseProviderTypes.ODBC, dnsConn>


[<EntryPoint>]
let main argv =
    let ctx = db.GetDataContext("DSN=MyDSN64")
opensystem.Data
打开FSharp.Data.Sql
[] 
设dnsConn=@“DSN=MyDSN32”
类型db=SqlDataProvider
[]
让主argv=
让ctx=db.GetDataContext(“DSN=MyDSN64”)

确保未选中“首选32位”选项。另请参阅:确保未选中“首选32位”选项。另请参阅:不错的解决方案。但是,为什么不使用带有
DatabaseVendor=Common.DatabaseProviderTypes.MSSQLSERVER
和相应连接字符串的SQL Server直接连接呢?这是一个不错的解决方案。但是,为什么不使用带有
DatabaseVendor=Common.DatabaseProviderTypes.MSSQLSERVER
和相应连接字符串的SQL Server直接连接呢?
type db = SqlDataProvider<Common.DatabaseProviderTypes.ODBC, dnsConn> `
open System.Data
open FSharp.Data.Sql
[<Literal>] 
let dnsConn = @"DSN=MyDSN32" 
type db = SqlDataProvider<Common.DatabaseProviderTypes.ODBC, dnsConn>


[<EntryPoint>]
let main argv =
    let ctx = db.GetDataContext("DSN=MyDSN64")