Загрузка 64-битного поставщика типов generi c ODB C из Visual Studio - PullRequest
2 голосов
/ 11 июля 2020

У меня установлена ​​последняя версия Visual Studio 20019, и я создаю консольное приложение. NET Framework 4.8.

Я установил пакет nuget SQL Provider и пытаюсь использовать 64-битный odb c драйвер, следуя ODB C do c.

Я установил x64 в качестве платформы в проекте F # свойства, как показано ниже

enter image description here

But when I type the classical code

open FSharp.Data.Sql 
[] 
let dnsConn = @"DSN=foo" 
type db = SqlDataProvider
let ctx = db.GetDataContext()

there is an

Error IM014, message: [Microsoft][ODBC Driver Manager] 
The specified DSN contains an architecture mismatch between the Driver and Application

and a red squiggly line in the editor, like below. enter image description here

What I've tried to do

I've checked that the DSN is ok by implementing an equivalent access via traditional C# code

static void OdbcSelect(OdbcConnection conn)
{
    using (var cmd = new OdbcCommand(sql, conn))
    {

and it's all fine. I've also opened an проблема на github, где они предложили

Попробуйте VS Code, я думаю, что это запускает FSI / FS C на 64-битной версии по умолчанию

Действительно, я пробовал fsianycpu из командной строки разработчика для VS 2019, и следующая команда не выдает никаких ошибок

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

Но мне действительно нужно использовать Visual Studio 2019 ... И в любом случае, если мне нужно использовать Visual Sutdio Code, потому что это единственный способ решить эту проблему (но действительно ли это единственный способ?), Я должен перенести проект из. Net Framework в Core (верно?) и после первой попытки. NET Код я получаю

error FS3033:
Errore segnalato dal provider di tipi 'FSharp.Data.Sql.SqlTypeProvider': 
Could not load file or assembly 'System.Data.Odbc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51'.

Краткое описание ситуация

Я использую 64-разрядную версию Win10 и использую VS2019 с. NET Framework и / или VS Code с. NET Core. Обратите внимание, что с чистым подключением odb c, командой и считывателем данных (код ниже) VS2019 и VS Code могут собирать и работать нормально, без каких-либо проблем с odb c во время компиляции и выполнения.

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> `

1 Ответ

1 голос
/ 13 июля 2020

Что касается Visual Studio и. NET Framework, все сводится к тому, что Visual Studio 2019 по-прежнему является 32-разрядным приложением.

Итак, я установил также 32-разрядную версию мой специфицированный c odb c драйвер и настроенный myDSN32 (только для целей локальной разработки).

Затем я смог открыть соединение через 64-битный драйвер odb c , как и ожидалось, поскольку я использую новый 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")
...