如何为tclodbc定义驱动程序?

时间:2012-05-31 08:04:15

标签: sql odbc tcl freetds

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

  

数据库配置 操作驱动程序属性

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

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

2 个答案:

答案 0 :(得分:1)

好的,我的观点基于these guides,了解如何使用FreeTDS驱动程序建立无DSN连接。

我测试了一个Debian Lenny系统tclodbc 2.5-5,unixodbc 2.2.11和libdbd-freetds 0.8.2-1-4.1和tcl 8.4 .16-2针对Microsoft SQL Server 2005实例安装。

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

一些注意事项:

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

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

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

答案 1 :(得分:0)

如果我们查看documentation,我们会看到有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文档以获取正确的属性集合,但我认为(基于this evidence)您将拥有该驱动程序如果它是一个空列表(或者只有FreeTDS),那么TDS_Version=5.0和属性可能就可以了。我真的不太了解配置ODBC ......