OK、 FreeTDS ドライバーを使用して DSN なしの接続を確立する方法について、これらの ガイドに基づいた私の見解を次に示します。
Microsoft SQL Server 2005 のインスタンスに対して、2.5-5、2.2.11、0.8.2-1-4.1、および 8.4.16-2 がインストールされtclodbc
たDebian unixodbc
Lennyシステムでテストしました。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
いくつかのメモ:
- FreeTDS ドライバーは、
/etc/odbcinst.ini
ファイルに登録されていることによって、ODBC サブシステムに認識されている必要があります。少なくとも私のシステムでは、適切なパッケージが自分でこれを処理すると思いますが、そのファイルに FreeTDS が登録されているかどうかを確認することをお勧めします。そうしないとDRIVER=FreeTDS
、接続文字列のそのビットが機能しません。名前付きドライバー ライブラリをロードします。
私の場合、ClientCharset
およびAPP
接続文字列パラメーターは機能しません。私は 2 番目の方法で問題はありませんが、最初の方法では、文字データが不適切なエンコーディングで返されるため、非常に時間がかかります。
しかし、接続文字列の代わりに を/etc/freetds/freetds.conf
使用してファイルから名前付きサーバーを使用する場合、そのような問題はありません。残念ながら、この種の方法では、DSN を使用しないセットアップを使用する目的の半分が無効になります。ServerName=THAT_SERVER
Server=SERVER_HOST
私のバージョンの FreeTDS ドライバーのバグである可能性が非常に高く、私のシステムは非常に古いので、YMMV とあなたは自分のシステムを調べたほうがよいでしょう。