首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

FreeTDS 完整指南:Linux 連接 SQL Server 的安裝、配置與 C API 實戰

     編輯:關於SqlServer

FreeTDS 是開源的 TDS (Tabular Data Stream) 協議實現,讓 Linux/Unix 上的 Perl、PHP、Python、C/C++ 程式能連線 Microsoft SQL Server 或 Sybase。

安裝步驟 (源碼編譯)

# 1. 下載解壓
wget ftp://ftp.freetds.org/pub/freetds/stable/freetds-1.3.20.tar.gz
tar -xzf freetds-1.3.20.tar.gz
cd freetds-1.3.20

# 2. 配置編譯選項
./configure --prefix=/usr/local/freetds \
            --with-tdsver=8.0 \
            --enable-msdblib

# 3. 編譯安裝
make && make install

# 4. 環境變數
echo 'export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/freetds/lib/' >> ~/.bashrc
source ~/.bashrc

# 5. 驗證
/usr/local/freetds/bin/tsql -C

關鍵配置檔 freetds.conf

位置:/usr/local/freetds/etc/freetds.conf(可由 --sysconfdir 指定)。

[global]
    tds version = 8.0
    client charset = UTF-8
    text size = 64512

[mssql_server]
    host = 192.168.1.100
    port = 1433
    tds version = 7.4
    ; 可覆蓋 global 設定

常用參數說明

參數說明
tds versionTDS 協議版本:4.2(Sybase), 5.0, 7.0(SQL 7.0), 7.1(2000), 7.2(2005), 7.3(2008), 7.4(2012+), 8.0(最新)
host/portSQL Server IP 與埠
client charset字元集轉換(建議 UTF-8)
timeout/connect timeout查詢/連線逾時秒數
dump file除錯日誌路徑

C API 核心函數速查 (DB-Library)

函數用途
dbinit()初始化 DB-Library
dblogin()取得 LOGINREC 結構
DBSETLUSER/DBSETLPWD設定登入帳號/密碼
dbopen()建立連線,回傳 DBPROCESS*
dbuse()選擇資料庫
dbcmd/dbfcmd構建 SQL 指令
dbsqlexec()送出 SQL 執行
dbresults()取得結果集狀態
dbnextrow()逐列讀取資料
dbbind()綁定欄位至變數
dbcancel/dbclose/dbexit清理資源

完整 C 範例程式

#include 
#include 
#include 

#define SERVER "mssql_server"
#define USER "sa"
#define PASS "your_password"
#define SQL "SELECT name FROM sys.databases"

int main() {
    LOGINREC *login; DBPROCESS *dbproc; RETCODE rc;
    if (dbinit() == FAIL) return 1;
    if ((login = dblogin()) == NULL) return 1;
    DBSETLUSER(login, USER);
    DBSETLPWD(login, PASS);
    if ((dbproc = dbopen(login, SERVER)) == NULL) return 1;
    if (dbuse(dbproc, "master") == FAIL) return 1;
    dbcmd(dbproc, SQL);
    if (dbsqlexec(dbproc) == FAIL) return 1;
    while ((rc = dbresults(dbproc)) != NO_MORE_RESULTS) {
        if (rc == FAIL) break;
        char name[128]; DBINT namelen;
        dbbind(dbproc, 1, NTBSTRINGBIND, 0, (BYTE*)name);
        while (dbnextrow(dbproc) != NO_MORE_ROWS) {
            printf("DB: %s\n", name);
        }
    }
    dbclose(dbproc); dbexit(); return 0;
}

編譯:gcc -I/usr/local/freetds/include -L/usr/local/freetds/lib -lsybdb test.c -o test

常見問題排查

  • 連線失敗:檢查 SQL Server TCP/IP 啟用、防火牆 1433、freetds.conf host/port/tds version。
  • 中文亂碼:設定 client charset = UTF-8,確認資料庫排序規則支援 Unicode。
  • ODBC 連線:FreeTDS 含 ODBC 驅動,配合 unixODBC 設定 odbcinst.ini/odbc.ini 即可供 PHP/PDO/Python pyodbc 使用。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved