F# 从Visual Studio加载64位通用ODBC类型提供程序
我有最新的VisualStudio20019,我正在构建一个.NETFramework 4.8控制台应用程序 我已经安装了SQL Provider nuget包,并尝试使用一个64位的odbc驱动程序,如下所示 我在F#项目属性中将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
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")