-
在Linux使用C語言訪問SQLServer時需要通過Freetds驅動去連接
-
Freetds安裝點擊跳轉到另一篇文章
-
按照上述文章,安裝好驅動後,測試demo如下:(SQLServer已安裝)
#include<stdio.h> #include<string.h> #include<stdlib.h> #include<unistd.h> #include <time.h> #include <sys/time.h> #include<sybfront.h> #include<sybdb.h> //gcc -o demo demo.c -L /usr/local/lib/ -lsybdb -I /usr/local/include/ char time_tmp[128] = ""; char *display_time(void){ struct timeval tv; struct timezone tz; struct tm *tp; gettimeofday(&tv, &tz); tp=localtime(&tv.tv_sec); memset(time_tmp, 0, sizeof(time_tmp)); sprintf(time_tmp, "%4d-%02d-%02d %02d:%02d:%02d.%03d",1900+tp->tm_year, 1+tp->tm_mon, tp->tm_mday, tp->tm_hour, tp->tm_min, tp->tm_sec, (int)(tv.tv_usec/1000)); return time_tmp; } #define LOG(format, ...) do { printf("[%s]:[%s] " format "\n", display_time(), __FUNCTION__, ##__VA_ARGS__ );} while (0) void get_tb_User(DBPROCESS *dbprocess); int main(int argc, char* argv[]) { char szUsername[32]= "sa"; char szPassword[32]= "admin"; char szDBName[32]= "db_test"; char szServer[32]= "SQLTest"; if(argc >= 2){ strcpy(szUsername, argv[1]); LOG("Input szUsername:%s\n", argv[1]); } if(argc >= 3){ strcpy(szPassword, argv[2]); LOG("Input szPassword:%s\n", argv[2]); } if(argc >= 4){ strcpy(szDBName, argv[3]); LOG("Input szDBName:%s\n", argv[3]); } if(argc >= 5){ strcpy(szServer, argv[4]); LOG("Input szServer:%s\n", argv[4]); } LOG("szUsername:%s, szPassword:%s, szDBName:%s, szServer:%s", szUsername, szPassword, szDBName, szServer); //初始化db-library dbinit(); //連接數據庫 LOGINREC *loginrec=dblogin(); // 設置登錄的用戶名 DBSETLUSER(loginrec,szUsername); // 設置登錄密碼 DBSETLPWD(loginrec,szPassword); // 連接sqlserver服務器地址和端口號,這裏纔是連接 DBPROCESS *dbprocess=dbopen(loginrec,szServer); if(dbprocess==FAIL){ LOG("Connect MSSQLSERVER fail\n"); return 0; }else{ LOG("Connect MSSQLSERVER success\n"); } // 連接數據庫 if(dbuse(dbprocess,szDBName)==FAIL){ LOG("Open data basename fail\n"); }else{ LOG("Open data basename success\n"); } // 查詢數據庫中表中的內容 while(1){ get_tb_User(dbprocess); sleep(10); } //關閉數據庫連接 dbclose(dbprocess); return 0; } void get_tb_User(DBPROCESS *dbprocess){ LOG("Begin Read !"); int tb_count = 0; dbcmd(dbprocess,"SELECT id as uid, account, sex, name FROM tb_User"); //查詢數據表中的內容,更具實際情況更改數據表名稱 // 執行命令 if(dbsqlexec(dbprocess)==FAIL){ LOG("Query table error\n"); }else{ DBINT result_code = 0; // 查看命令執行的結果。 while((result_code=dbresults(dbprocess))!=NO_MORE_RESULTS) { DBINT uid = 0; DBCHAR account[32] = ""; DBINT sex = 0; DBCHAR name[32] = ""; if(result_code==SUCCEED){ dbbind(dbprocess,1,INTBIND,(DBINT)0,(BYTE*)&uid); dbbind(dbprocess,2,CHARBIND,(DBCHAR)0,(BYTE*)account); dbbind(dbprocess,3,INTBIND,(DBINT)0,(BYTE*)&sex); dbbind(dbprocess,4,CHARBIND,(DBCHAR)0,(BYTE*)name); while(dbnextrow(dbprocess)!=NO_MORE_ROWS){ tb_count++; // 打印本行的數據 printf("uid:%d, account:%s, sex:%d, name:%s\n",uid, account, sex, name); } } } } LOG("Read tb_count:%d", tb_count); }
-
編譯:gcc -o demo demo.c -L /usr/local/lib/ -lsybdb -I /usr/local/include/
Linux下C語言通過Freetds連接SQLServer
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.