Linux下C語言通過Freetds連接SQLServer

  1. 在Linux使用C語言訪問SQLServer時需要通過Freetds驅動去連接

  2. Freetds安裝點擊跳轉到另一篇文章

  3. 按照上述文章,安裝好驅動後,測試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);
    }
    
    
  4. 編譯:gcc -o demo demo.c -L /usr/local/lib/ -lsybdb -I /usr/local/include/

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章