1

我想使用 Linux 环境中的 tclodbc 连接到 MS SQL 服务器。我有驱动程序(freeTDS)和连接字符串。但我不知道如何配置 tclodbs 使用的驱动程序。有一个命令

数据库配置 操作驱动属性

但我不知道该放什么operationand attributes,以及这是否是正确的命令。

与我的问题相关:Accessing Microsoft SQL Server from Tcl running on GNU/Linux

4

2 回答 2

1

好的,这是我根据这些 关于如何使用 FreeTDS 驱动程序建立无 DSN 连接的指南的看法。

我已经针对 Microsoft SQL Server 2005 的实例对其安装了 2.5-5、2.2.11 和 0.8.2-1-4.1 和 8.4.16-2的Debian tclodbcLenny系统进行了测试。unixodbclibdbd-freetdstcl

package require tclodbc

proc cs_append {varName args} {
    set alen [llength $args]
    if {$alen < 2 || $alen % 2 != 0} {
        return -code error "Wrong # args: should be varName key value ?key value?"
    }

    upvar 1 $varName qs

    foreach {key value} $args {
        if {$qs ne ""} {
            append qs \;
        }
        append qs $key = \{ [string map {\{ \\\{} $value] \}
    }
}

set user test
set pass secret

set cs ""
cs_append cs DRIVER FreeTDS UID $user PWD $pass \
    Server myserver.domain.local \
    ClientCharset UTF-8 \
    APP "My test app"

database connect db $cs
foreach row [db {select * from MyDatabase..MyTable}] {
    puts $row
}
db disconnect

一些注意事项:

  • /etc/odbcinst.ini通过在文件中注册 FreeTDS 驱动程序,ODBC 子系统必须知道它。我想至少在我的系统上,适当的软件包会自己处理这个问题,但你最好验证你是否在该文件中注册了 FreeTDS,否则DRIVER=FreeTDS连接字符串中的那个位将不起作用,因为 ODBC 将不知道如何加载命名的驱动程序库。
  • 和连接字符串参数在我ClientCharset情况下不起作用。虽然我可以接受第二个,但第一个很糟糕,因为在这种情况下,字符数据以某种拙劣的编码返回。APP

    /etc/freetds/freetds.conf但是,当我使用文件中的命名服务器ServerName=THAT_SERVER而不是Server=SERVER_HOST在连接字符串中使用命名服务器时,就没有这样的问题了。不幸的是,这种方式破坏了使用无 DSN 设置的一半目的。

    很可能这是我的 FreeTDS 驱动程序版本中的一个错误,我这里有一个非常过时的系统,所以 YMMV 和你最好检查一下你的系统。

于 2012-05-31T11:58:40.877 回答
0

如果我们查看文档,我们会看到有 6 个操作,其中您可能想要的一个是add_dsn. 包括一个例子(下面,有一个小的修正):

set driver "Microsoft Access Driver (*.mdb)" 
set attributes [list "DSN=mydsn" "DBQ=c:\mydb.mdb" "FIL=MS Access"] 
database configure add_dsn $driver $attributes 

恐怕您必须查阅 FreeTDS 文档才能获得正确的属性集合,但我认为(基于此证据)您将拥有驱动程序,并且如果它是空列表FreeTDS,则属性可能没问题(或仅TDS_Version=5.0在其中)。配置ODBC我真的不是太懂……</p>

于 2012-05-31T11:02:44.257 回答