当前位置: 首页 > 工具软件 > FreeTDS > 使用案例 >

使用freetds库连接MS SQL SERVER

孟海
2023-12-01
  
1       概述
在linux下连接MSSQL是一件很痛苦的事,因为微软同志没有提供任何接口给开发人员,还好,MSSQL是从Sybase衍生出来的,FreeTDS是一个数据库底层的驱动程序,用freetds的库进行开发是一件很方便的事。freetds可以连接sybase和ms sql server数据库。
2       安装,配置,测试
官方网站:http://www.freetds.org
版本:0.64
$ tar -zxvf freetds-stable.tgz
$ ./configure --prefix=/usr/local/freetds
$ make
$ su root
$ make install
$ tsql -H 2.2.2.2 -p 1433 -U test -P test
tsql 说明:
    H :数据库IP
    p: 数据库端口
    U :用户名
    P :密码
3       linux下C/C++开发
3.1    利用freetds自带的程序开发
位置在freetds-0.64/src/ apps
$make clean
$make
3.2    利用freetds库快速开发
testsybase.c
 
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
 
#include <sybfront.h>
#include <sybdb.h>
 
 
 
int main(void)
{
       char szUsername[32] = "test";
       char szPassword[32] = "test";
       char szDBName[32] = "test";
       char szServer[32] = "2.2.2.2:1433";
 
       //初始化db-library
       dbinit();
       //连接数据库
       LOGINREC *loginrec = dblogin();
       DBSETLUSER(loginrec, szUsername);      
       DBSETLPWD(loginrec, szPassword);
       DBPROCESS *dbprocess = dbopen(loginrec, szServer);
       if(dbprocess == FAIL){
              printf("ASB>>      Conect MS SQL SERVER fail       /n");
              return 0;
       }else{
              printf("ASB>>      ConnectEMS conect MS SQL SERVER success/n");
       }
       if(dbuse(dbprocess, szDBName) == FAIL){
              printf("ASB>>      Open database name fail/n");
       }else{
              printf("ASB>>      Open database name success/n");
       }
      
       //查询数据库
       dbcmd(dbprocess, "select ID,BeginTime,Description from Alarms");
       if(dbsqlexec(dbprocess) == FAIL){
              printf("ASB>>      Query Alarms table error/n");    
       }
      
       DBINT result_code;
       char szID[1024];
       char szBeginTime[1024];
       char szDescription[1024];
       int rows = 0;
       while ((result_code = dbresults(dbprocess)) != NO_MORE_RESULTS){
              if (result_code == SUCCEED){
                     dbbind(dbprocess, 1, CHARBIND, (DBINT)0, (BYTE*)szID);
                     dbbind(dbprocess, 2, CHARBIND, (DBCHAR)0, (BYTE*)szBeginTime);
                     dbbind(dbprocess, 3, CHARBIND, (DBCHAR)0, (BYTE*)szDescription);
                     while (dbnextrow(dbprocess) != NO_MORE_ROWS){                       
                            printf("ASB>>             ID=%s/n", szID);
                            printf("ASB>>             szAid=%s/n", szBeginTime);
                            printf("ASB>>             szBeginTime=%s/n", szDescription);
                     }
              }
       }
       //关闭数据库连接
       dbclose(dbprocess);
      
       return 0;
}
 
编译: gcc -o testsybase testsybase.c ./src/dblib/.libs/libsybdb.a
 
 
 类似资料: