1

Linux 環境から tclodbc を使用して MS SQL サーバーに接続したいと考えています。ドライバー (freeTDS) と接続文字列があります。しかし、ドライバーを tclodbs で使用するように構成する方法がわかりません。命令がある

データベース構成 操作ドライバー属性

operationしかし、何をandとして置くattributesべきか、またこれが正しいコマンドかどうかはわかりません。

私の質問に関連: GNU/Linux で実行されている Tcl から Microsoft SQL Server にアクセスする

4

2 に答える 2

1

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 unixodbcLennyシステムでテストしました。libdbd-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

いくつかのメモ:

  • FreeTDS ドライバーは、/etc/odbcinst.iniファイルに登録されていることによって、ODBC サブシステムに認識されている必要があります。少なくとも私のシステムでは、適切なパッケージが自分でこれを処理すると思いますが、そのファイルに FreeTDS が登録されているかどうかを確認することをお勧めします。そうしないとDRIVER=FreeTDS、接続文字列のそのビットが機能しません。名前付きドライバー ライブラリをロードします。
  • 私の場合、ClientCharsetおよびAPP接続文字列パラメーターは機能しません。私は 2 番目の方法で問題はありませんが、最初の方法では、文字データが不適切なエンコーディングで返されるため、非常に時間がかかります。

    しかし、接続文字列の代わりに を/etc/freetds/freetds.conf使用してファイルから名前付きサーバーを使用する場合、そのような問題はありません。残念ながら、この種の方法では、DSN を使用しないセットアップを使用する目的の半分が無効になります。ServerName=THAT_SERVERServer=SERVER_HOST

    私のバージョンの FreeTDS ドライバーのバグである可能性が非常に高く、私のシステムは非常に古いので、YMMV とあなたは自分のシステムを調べたほうがよいでしょう。

于 2012-05-31T11:58:40.877 に答える
0

ドキュメントを見ると、6 つの操作があることがわかります。そのうちの 1 つはおそらく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 に答える