Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1866945
  • 博文数量: 473
  • 博客积分: 13997
  • 博客等级: 上将
  • 技术积分: 5953
  • 用 户 组: 普通用户
  • 注册时间: 2010-01-22 11:52
文章分类

全部博文(473)

文章存档

2014年(8)

2013年(38)

2012年(95)

2011年(181)

2010年(151)

分类: C/C++

2010-02-10 13:35:32

1       概述
在linux下连接MSSQL是一件很 痛苦的事,因为微软同志没有提供任何接口给开发人员,还好,MSSQL是从Sybase衍生出来的,FreeTDS是一个数据库底层的驱动程序,用 freetds的库进行开发是一件很方便的事。freetds可以连接sybase和ms sql server数据库。
2       安装,配置,测试
官方网站:
版本: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
#include
#include
#include
 
#include
#include
 
 
 
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 -L/usr/local/freetds/lib -lsybdb
本例中采用的是动态库注意环境变量的添加。



阅读(1757) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~