odbc(odbc)
![生成状态](https://ci.appveyor.com/api/projects/status/vpn6a1pme25upbux?svg=true)
Haskell绑定到ODBC API,强调稳定性,测试和简单性。
在CI中测试以下数据库驱动程序:
- Microsoft SQL Server 2019
在CI中对以下操作系统进行测试:
- Windows(窗口)
- Linux操作系统
ODBC的工作原理
ODBC是一个拆分为经理和a司机.
在Windows上,操作系统附带了一个ODBC管理器。在Linux上和OS X,unixODBC包提供了相同的功能。
对于每种数据库类型,都有驱动程序包。当你提供连接字符串,如下所示:
ODBC_TEST_CONNECTION_STRING='DRIVER={ODBC DRIVER 13 for SQL Server};服务器=127.0.0.1;Uid=SA;Pwd=密码;加密=否'
这个驾驶员
告诉ODBC API要使用哪个库。在这种情况下,它是Microsoft提供的最新SQL Server驱动程序。然后,ODBC功能,如SQLDriverConnectW
将调用该库。
如何连接到Microsoft SQL Server
近年来,微软发布了用于SQL Server的二进制驱动程序适用于Windows、Linux和OS X,每个操作都有一个指南系统。最新最伟大的官方微软指南驱动程序是在这里.
您可以使用SQL Server docker映像在几秒钟内随时随地轻松运行SQL Server。
我已经在自己的机器上测试了OSX指令。此项目的Dockerfile遵循Linux的安装说明,以及AppVeyor文件遵循Windows的安装说明。
该软件包附带一个名为odbc(odbc)
其接受连接字符串作为其参数。你可以用这个轻松测试您的连接。
(使用17
而不是13
如果这是您安装的驱动程序。)
$stack exec odbc'DRIVER={SQL Server的odbc驱动程序13};服务器=192.168.99.101;Uid=SA;Pwd=密码;加密=否'>创建表foo(int)行数:0>插入foo值(123123123)行数:0>从foo中选择*123123123行数:1
检查您的程序包是否正常工作
您可以在docker中启动SQL Server并使用平凡二进制odbc(odbc)
此套餐附带的:
$docker run--net=host-e“ACCEPT_EULA=Y”-e“SA_PASSWORD=Passw0rd”-d mcr.microsoft.com/mssql/server:2017-CU8-ubuntu无法在本地找到图像“mcr.microsoft.com/mssql/server:2017-CU8-ubuntu”2017-CU8-ubuntu:从mssql/server拉取4fa80d7b805d:拉动完成484dd0f2fbdc:拉动完成47004b22ec62:拉动完成b70745c852a2:拉动完成718060832ef2:拉动完成5594e4e5950b:拉动完成5b67719e2956:拉动完成7d648891de3f:拉动完成e0d1b3db20c8:拉入完成ded313a21911:拉入完成摘要:sha256:e1708b7d3aaf4a693ef8785f15a8b4d0829381e373c4090fd0b294d1501e57状态:已下载mcr.microsoft.com/mssql/server:2017-CU8-ubuntu的更新映像ba1ad8b726c7e958bad6d2f7b051514f218c3024984f38adb2d6bb7751ea90$stack exec odbc'DRIVER={odbc DRIVER 17 for SQL Server};服务器=127.0.0.1;Uid=SA;Pwd=密码;加密=否'>选择2*3;6行数:1>$
常见问题
无法打开库“ODBC Driver 13 for SQL Server”
如果您看到这样的错误:
[unixODBC][Driver Manager]无法打开库“ODBC Driver 13 for SQL Server”:找不到文件
那么你可能会尝试使用错误的驱动程序。你可能有已安装版本17
,因此将字符串更改为SQL Server的ODBC驱动程序17
.
如果它仍然这样说,您可能需要配置odbcinst.ini文件:
[ODBC Driver 17 for SQL Server(SQL Server的ODBC驱动程序17)]驱动程序=<Driver_path>
在Nix中,这可能是<driver_path>是评估的结果${nixpkgs.unixODBCDrivers.msodbcsql17}/lib/libmsodbcsql-17.7.so.1.1“
.
需要提供以下软件包:
- nixpkgs.freetds
- nixpklgs.unixODBC
- nixpkgs.unixODBCDrivers.msodbcsql17
找不到数据源名称且未指定默认驱动程序
如果您看到这样的错误:
[unixODBC][Driver Manager]找不到数据源名称,未指定默认驱动程序
这是一条可怕的错误消息。如果通过shell传递DSN环境变量或参数,请检查输入字符串是否引用例如。“驱动程序=..”
而不是驱动程序=。。
由于愚蠢的外壳脚本引用问题。
终止时出现类型为的未捕获异常
如果在驱动程序版本为17的OS X上看到类似这样的错误,
libc++abi.dylib:以类型为的未捕获异常终止std::runtime_error:collate_byname::collate_yname构造失败对于C/en_AU.UTF-8/C/C/C
使用驱动程序13或有关详细信息,请参阅此处.
贡献者