linux 访问 MS sql Server 数据库 sql Server2008 R2

1.下载freetds-0.63版本(因为0.63版支持中文),点此下载

http://www.ibiblio.org/pub/Linux/ALPHA/freetds/old/0.63/freetds-0.63.tar.gz

2.把freetds-0.63.tar.gz放在任意目录解压

3.执行命令:tar-xzvffreetds-0.63.tar.gz

4.配置环境变量,执行命令:./configure–prefix=(自定义目录,等号两边不能有空格)–with-tdsver=8.0–enable-msdblib

5.执行命令:make

6.执行命令:makeinstall

7.执行命令测试有没有安装成功:tsql-H172.168.10.**-p1433-Usa-P123456

其中:-H服务器IP

-p端口号

-U访问数据库帐号

-P密码

如果粗线“>”说明成功。可以尝试访问数据库

>use数据库名

>select*from表名

>go

8.在项目中引用要包含两个头文件“sqlfront.h”“sybdb.h”,这两个头文件在上面第四步–prefix=目录,的目录中,引用到项目,在项目–属性–C/C++Build–Settings–GCCC++Linker–Miscellaneous中的OtherObjects添加文件libsybdb.so要不然虽然上面添加了两个头文件,但是编译链接的时候还是找不到sybdb.h中的函数。

9.还要找到/etc/ld.so.conf,添加一条你引用的库路径(比如:/usr/local/freetds/lib),然后执行命令:ldconfig更新,再编译链接项目,就可以运行了

10.相关连接数据库代码:

#include <string.h>#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <iostream>using namespace std;  #include "/usr/freetds/freetds-0.63/include/sqlfront.h"#include "/usr/freetds/freetds-0.63/include/sybdb.h" #define SQLDBIP "172.19.10.**" //服务器IP#define SQLDBPORT "1433"#define SQLDBNAME "***" //数据库名称#define SQLDBUSER "sa"  //访问帐号#define SQLDBPWD "123456"//密码#define SQLDBSERVER SQLDBIP ":" SQLDBPORT#define SQLDBCMD "select * from 表名" int main(){LOGINREC *login;DBPROCESS *dbproc;RETCODE erc;if(dbinit()==FAIL){cout<<"dbinit()失败!"<<endl;return 0;} if((login = dblogin()) == NULL){cout<<"dblogin()登录失败!"<<endl;return 0;} DBSETLUSER(login,SQLDBUSER);DBSETLPWD (login,SQLDBPWD); if((dbproc=dbopen(login,(char *)SQLDBSERVER)) ==NULL){cout<<"dbopen() faild!"<<endl;return 0; } //调用数据库名称if(SQLDBNAME && (erc = dbuse(dbproc,(char*)SQLDBNAME)) == FAIL){cout<<"unable to use to database "<<SQLDBNAME <<endl;} //将SQL语句填充到命令缓冲区dbcmd(dbproc,SQLDBCMD); if((erc = dbsqlexec(dbproc)) == FAIL){cout<<"dbsqlexec failed!"<<endl;return 0;} cout<<"开始循环查询数据!"<<endl;while((erc = dbresults(dbproc))!= NO_MORE_RESULTS){struct col{char *name;//列名char *buffer;int type;int size;int status;}*columns,*pCol; int nCols;int row_code;if(erc == FAIL){cout<<"dbresults failed!"<<endl;break;}nCols = dbnumcols(dbproc);//返回执行结果的列数目 if((columns = (col*)calloc(nCols,sizeof(struct col))) == NULL){return 0;} for(pCol = columns;pCol-columns<nCols;pCol++){int c = pCol - columns +1;pCol->name = dbcolname(dbproc,c);//返回制定列的列名pCol->type = dbcoltype(dbproc,c);pCol->size = dbcollen(dbproc,c);if((pCol->buffer = (char*)calloc(1,20)) == NULL){return 0;}erc = dbbind(dbproc,c,NTBSTRINGBIND,20,(BYTE*)pCol->buffer);if(erc == FAIL){cout<<"dbbind failed!"<<endl;return 0;} erc = dbnullbind(dbproc,c,&pCol->status);if(erc == FAIL){cout<< "dbnullbind failed!"<<endl;return 0;} } //打印数据while((row_code=dbnextrow(dbproc)) != NO_MORE_ROWS){switch(row_code){case REG_ROW:for(pCol = columns;pCol-columns<nCols;pCol++){cout<< pCol->buffer<<endl;}break;case BUF_FULL:break;case FAIL:cout<<"dbresults failed!"<<endl;break;default:cout<<row_code<<endl;}} //释放bufferfor(pCol = columns;pCol-columns<nCols;pCol++){free(pCol->buffer);} free(columns);if(DBCOUNT(dbproc)>-1){cout<<DBCOUNT(dbproc)<<"rows affected!"<<endl; }} dbclose(dbproc);dbexit(); return 0;}

离开之后,我想你不要忘记一件事:不要忘记想念我。

linux 访问 MS sql Server 数据库 sql Server2008 R2

相关文章:

你感兴趣的文章:

标签云: