这个真的开始难倒我了。我正在运行 Ubuntu 12.04 并尝试连接到运行 MS SQL server 2012 的机器。首先,我将提供一些有关我的设置的信息:
我的 freetds.conf:
[EXNAME]
host = IP
port = 1433
tds version = 7.0
client charset = UTF-8
设置好我的 freetds.conf 后,我首先测试我与 tsql 的连接,它产生了预期的(和受欢迎的)提示:
...
using default charset "UTF-8"
1>
所以我的 FreeTDS 设置似乎工作正常。接下来我设置 odbc.ini 和 obdcinst.ini:
odbc.ini:
[EXNAME]
Driver = FreeTDS
ServerName = EXNAME
UID = Me
PWD = Pass
odbcinst.ini:
[FreeTDS]
Description = FreeTDS Driver
Driver = /usr/lib/x86_64-linux-gnu/odbc/libtdsodbc.so
Setup = /usr/lib/x86_64-linux-gnu/odbc/libtdsS.so
UsageCount = 1
在此设置之后,我运行 osql 进行检查。它输出所有预期的响应,它能够在 ondcb.ini 中找到驱动程序和正确的段落,例如:
[EXNAME] found in /etc/odbc.ini
found this section:
[EXNAME]
Driver = FreeTDS
ServerName = EXNAME
UID = Me
PWD = Pass
looking for driver for DSN [EXNAME] in /etc/odbc.ini
found driver line: " Driver = FreeTDS"
依此类推,直到:
DSN [EXNAME] has servername "" (from /etc/odbc.ini)
osql 似乎没有检测到 odbc.ini 中的服务器名称。
完成此检查后,我可以通过 isql 进行连接,但无法运行任何 SQL 命令。我收到以下错误:
SQL> SELECT name FROM master..sysdatabases;
[37000][unixODBC][FreeTDS][SQL Server]Could not find stored procedure 'SELECT'.
[ISQL]ERROR: Could not SQLExecute
我试过的:
A.) 几乎所有的配置和命名约定都可以在 freetds.conf 和两个 .ini 文件中想到。发布更改我执行上面相同的测试并得到相同的结果
B.) 在 isql 之外重现错误。ROBC 给了我完全相同的错误。当然,这是意料之中的,但我想为什么不
C.) 除了 MS SQL Server 之外的 SQL 变体。我想以防万一有人错误地通知我,我也在那里尝试了一些 MySQL 命令。这可能是一个 SQL 问题,但我不确定。
D.) 我最接近发现与 osql 吐出的类似错误(我猜是结果)是here。正如上一篇文章中所建议的那样,问题,至少就它与 osql 的响应相关而言,可能与awk
. 正如建议的那样,我awk
通过创建一个变量并尝试解析服务器名来进行测试:
$ SERVER_LINE='ServerName = SERVER'
$ echo ${SERVER_LINE} | awk -F '=[[:space:]]*' '{print $2}'
这应该导致SERVER
但我得到“”。
那是我的全部了。总之,OSQL 似乎无法在 odbc.ini 中找到服务器名称,这可能会也可能不会导致我无法执行来自 ISQL 或 ROBC 的任何命令。我开始怀疑这些问题是不相交的,但任何帮助将不胜感激。
编辑:2014 年 7 月 31 日 让这一切正常工作。除了我强调的内容之外,还有一些其他问题正在发生。我最终不得不在 Mac 和 Linux 机器上建立类似的连接。以下是两者的说明:http: //www.joecjr.com/2014/07/27/install-and-use-freetds-unixodbc-and-rodbc-or-pyodbc/