let the linux programm connect to mssqlserver, install the third library - freetds.
here are the steps to make it work, don't ask why, just have a try.
1,setup unixODBC
./configure --prefix=/user/local/unixODBC
make
make install
2,setup freetds
./configure --prefix=/user/local/freetds --with-unixodbc=/user/local/unixODBC --with-tdsver=8.0 --enable-gui=no --enable-msdblib
make
make install
3,configure freetds
vi etc/freetds.conf
[MyServer2k5]
host = 192.168.90.5
port = 1433
tds version = 8.0
client charset = GBK
./freetds/bin/tsql -S MyServer2k5 -H 192.168.90.5 -p 1433 -U sa -P 123456
./freetds/bin/tsql -S MyServer2k5 -U sa -P 123456 -D test
4,configure unixODBC
vi etc/odbcinst.ini
[TDS]
Description = MS-SQL Server
Driver = /user/local/freetds/lib/libtdsodbc.so
Setup = /user/local/freetds/lib/libtds.so
FileUsage = 1
vi etc/odbc.ini
[test];DSN
Driver = TDS
Servername = MyServer2k5
Server = 192.168.90.5
Database = test
Port = 1433
Socket =
Option =
Stmt =
vi /root/.odbc.ini
[test]
Driver = TDS
Servername = MyServer2k5
Server = 192.168.90.5
Database = test
Port = 1433
./unixODBC/bin/isql -v test sa 123456
code come last...
#include <stdio.h> #include <string.h> #include <stdlib.h> #include <unistd.h> #include </user/local/freetds/include/sybfront.h> #include </user/local/freetds/include/sybdb.h> int main(void) { char szUsername[32] = "sa"; char szPassword[32] = "123456"; char szDBName[32] = "test"; char szServer[32] = "192.168.90.5:1433"; dbinit(); LOGINREC *loginrec = dblogin(); DBSETLUSER(loginrec, szUsername); DBSETLPWD(loginrec, szPassword); DBSETLCHARSET(loginrec,"GBK"); DBPROCESS *dbprocess = dbopen(loginrec, szServer); if(dbprocess == FAIL) { printf("connect fail/n"); return 0; } printf("conect success/n"); if(dbuse(dbprocess, szDBName) == FAIL) { printf("Open database fail/n"); } else { printf("Open database success/n"); } dbcmd(dbprocess, "select * from table1"); if(dbsqlexec(dbprocess) == FAIL) { printf("Query table error/n"); } DBINT result_code; char szID[1024]={0}; char szName[1024]={0}; int rows = 0; while ((result_code = dbresults(dbprocess)) != NO_MORE_RESULTS){ if (result_code == SUCCEED){ memset(szID,0,1024); memset(szName,0,1024); dbbind(dbprocess, 1, CHARBIND, (DBINT)0, (BYTE*)szID); dbbind(dbprocess, 2, CHARBIND, (DBCHAR)0, (BYTE*)szName); while (dbnextrow(dbprocess) != NO_MORE_ROWS){ printf("ID=%s/t", szID); printf("Name=%s/n", szName); memset(szID,0,1024); memset(szName,0,1024); } } } dbclose(dbprocess); return 0; }