我想使用Linux环境中的tclodbc连接到MS SQL服务器。我有驱动程序(freeTDS)和连接字符串。但我不知道如何配置tclodbs使用的驱动程序。有一个命令
数据库配置 操作驱动程序属性
但是我不知道要放什么operation
和attributes
,以及这是否是正确的命令。
与我的问题相关:Accessing Microsoft SQL Server from Tcl running on GNU/Linux
答案 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
一些注意事项:
/etc/odbcinst.ini
文件中注册。我想至少在我的系统上适当的软件包会自己处理这个问题,但你最好验证你是否在该文件中注册了FreeTDS,否则连接字符串中的DRIVER=FreeTDS
位将无法正常工作,因为ODBC将会不知道如何加载指定的驱动程序库。 ClientCharset
和APP
连接字符串参数在我的情况下不起作用。虽然我可以使用第二个,但第一个很糟糕,因为在这种情况下,字符数据以某种拙劣的编码方式返回。
但是当我在连接字符串中使用/etc/freetds/freetds.conf
而不是ServerName=THAT_SERVER
从Server=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 ......