我想使用 Linux 环境中的 tclodbc 连接到 MS SQL 服务器。我有驱动程序(freeTDS)和连接字符串。但我不知道如何配置 tclodbs 使用的驱动程序。有一个命令
数据库配置 操作驱动属性
但我不知道该放什么operation
and attributes
,以及这是否是正确的命令。
与我的问题相关:Accessing Microsoft SQL Server from Tcl running on GNU/Linux
我想使用 Linux 环境中的 tclodbc 连接到 MS SQL 服务器。我有驱动程序(freeTDS)和连接字符串。但我不知道如何配置 tclodbs 使用的驱动程序。有一个命令
数据库配置 操作驱动属性
但我不知道该放什么operation
and attributes
,以及这是否是正确的命令。
与我的问题相关:Accessing Microsoft SQL Server from Tcl running on GNU/Linux
好的,这是我根据这些 关于如何使用 FreeTDS 驱动程序建立无 DSN 连接的指南的看法。
我已经针对 Microsoft SQL Server 2005 的实例对其安装了 2.5-5、2.2.11 和 0.8.2-1-4.1 和 8.4.16-2的Debian tclodbc
Lenny系统进行了测试。unixodbc
libdbd-freetds
tcl
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 和你最好检查一下你的系统。
如果我们查看文档,我们会看到有 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>