1. 程式人生 > >LINUX下通過C++訪問SQLSERVER資料庫

LINUX下通過C++訪問SQLSERVER資料庫

LINUX下通過C++訪問微軟的資料庫,有點麻煩。微軟官方的LINUX資料庫驅動支援不好,本例通過unixODBC,使用freeTDS驅動,再通過SOCI封裝的ODBC方式訪問資料庫(具體版本:unixODBC-2.3.4.tar.gz和freetds-0.95.19.tar.gz)

1、安裝unixODBC

tar -xvf unixODBC-2.3.0.tar.gz
./configure --prefix=/usr --libdir=/usr/lib64 --sysconfdir=/etc --enable-gui=no --enable-drivers=no --enable-iconv=yes --with-iconv-char-enc=GB18030 --with-iconv-ucode-enc=UTF16LE
make
make install

2、安裝freetds驅動

tar -xvf freetds-patched.tar.gz
configure
make
make install
安裝完成後,用isql命令來驗證是否能成功連線到Sql Servcer資料庫,一定要這一步驗證了後,才能繼續編碼開發

3、安裝SOCI

tar -xvf soci-3.2.2.tar.gz
cmake -G "Unix Makefiles" -DCMAKE_INSTALL_PREFIX=./inss -DWITH_BOOST=OFF -DWITH_MYSQL=OFF -DWITH_ORACLE=OFF -DWITH_POSTGRESQL=OFF -DWITH_SQLITE3=OFF -DWITH_FIREBIRD=OFF -DWITH_DB2=OFF
make
make install

4、編寫簡單的SOCI程式碼來測試連線問題

5、驗證讀寫中文是否亂碼

如果有問題或者直接報錯,記得加上ODBC的日誌
odbcinst.ini檔案中增加:
[ODBC]
TraceFile = /tmp/sql.log
Trace = Yes
如果報錯如下,可以再freeTDS配置中加上字元編碼
DIAG [HY000] [FreeTDS][SQL Server]Error converting characters into server's character set. Some character(s) could not be converted
配置FREETDS:/usr/local/etc/freetds.conf,增加: 
client charset = GB18030

X、其他

一、微軟官方的驅動不能用,除了中文亂碼外,還斷斷續續的不穩定
二、FREETDS版本0.95.0存在記憶體洩露,換用0.95.19解決問題
三、寫入資料庫時,字串會多一位(ASCII為0),需要修改backends/odbc/vector-use-type.cpp檔案中// add one for null註釋位置的程式碼