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
本例中采用的是动态库注意环境变量的添加。
阅读(1748) | 评论(0) | 转发(0) |