C语言 使用freetds连接sql server读取,win下可用

C语言 使用freetds连接sql server读取,win下可用, linux下也可以,.

以下是源码,使用sql server的master数据库来测试。读取,

Win下编译器是TDM-GCC-64,: gcc version 10.3.0 (tdm64-1)

Linux下是gcc:: gcc version 6.3.0 20170516

-----------------------------

#include

#include

#include

#include

#include

#include

#include

#include


void shuju()

{

// 编码

//setlocale(LC_ALL, "");

//win下的cmd要执行chcp 65001, 到utf8的编码下显示才正常

char aaa[50]= "test start ...";

printf("=> %s ",aaa);

char szName[32] = "sa";

char szPwd[32] = "123456789";

char szDBName[32] = "master"; // master 数据库

char szServer[32] = "192.168.0.9:1433";

char bianma[32] = "utf8";


//初始化db-library

DBINT result_code;

dbinit();

//

LOGINREC *loginrec = dblogin();

DBSETLUSER(loginrec, szName);

DBSETLPWD(loginrec, szPwd);

DBSETLCHARSET(loginrec, bianma);

DBPROCESS *dbprocess = dbopen(loginrec, szServer);

if(dbprocess == FAIL) //如果连接失败

{

fprintf(stderr, "Connect Fail "); //在标准错误中输出信息

exit(EXIT_FAILURE); //进程异常退出

}else{ //如果连接成功


printf("Connect success ");

}


if(dbuse(dbprocess, szDBName) == FAIL) //使用某个数据库,如果使用失败

{

dbclose(dbprocess); //关闭数据库连接句柄, 并且回收相关资源

exit(EXIT_FAILURE); //进程异常退出

}


//开始进行数据库中数据查询的工作------------------

char mssqlbuf[1024]; //定义保存数据库查询语句的字符串

memset(mssqlbuf, 0x00, sizeof(mssqlbuf)); //开始初始化字符串

sprintf(mssqlbuf, "select name,dbid from [sysdatabases] order by [name]"); //组装操作sql的语句, 将sql语句保存到mssqlbuf

dbcmd(dbprocess, mssqlbuf); //将刚刚组装好的sql命令, 使用dbcmd命令保存到数据库连接句柄的缓存中


if(dbsqlexec(dbprocess) == FAIL) //如果执行的命令失败

{

dbclose(dbprocess); //关闭数据库操作进程

exit(EXIT_FAILURE); //程序异常退出

}


char UserName[80]; //定义两个变量来保存绑定出来的数据 ????

char CardNo[16];

memset(UserName,'\0',sizeof(UserName));

memset(CardNo,'\0',sizeof(CardNo));

//char strx[] = "";

//char *strx;

char query[4096]={};

while ((result_code = dbresults(dbprocess)) != NO_MORE_RESULTS){

if (result_code == SUCCEED){

dbbind(dbprocess, 1, STRINGBIND, 0, (BYTE*)UserName);

dbbind(dbprocess, 2, CHARBIND, (DBINT)0, (BYTE*)CardNo);


int k=1;

while (dbnextrow(dbprocess) != NO_MORE_ROWS){

char shustr[100]="";

sprintf(shustr,"%d name: %s no: %s ",k,UserName,CardNo);

k=k+1;

strcat(query,shustr);


}


printf("%s ok ",query);

// printf("%s",strx);


}

}


dbclose(dbprocess);


}


int main(void)

{

shuju();

//return 0;

}

// linux: 手动编译freetds , 就要在编译时指向freetds安装路径

// linux编译: gcc -o cmssqlmaster cmssql-master.c -lsybdb -I /usr/local/freetds/include -L /usr/local/freetds/lib

// linux: 如果是apt-get install freetds-dev 安装的,编译时就不用上边那行那样加参数: gcc -o cmssqlmaster cmssql-master.c -lsybdb

// win下用的freedts 去这里下载, https://github.com/ramiro/freetds/releases/tag/v0.95.95

// win下cmd终端运行输出中文乱码解决:在cmd状态下输入 chcp 65001 , utf8字符串,在终端的显示

// win 编译: gcc -o cmssqlmaster cmssql-master.c -lsybdb -L "D:\Proj-C\freetds-win64-vs2015\lib-nossl" -I "D:\Proj-C\freetds-win64-vs2015\include"

-----------------------------

最初这个程序连接mssql测试的例子网上很多源码,都是使用freetds的,后来想在Windows下使用,网上都C语言版本的都是使用odbc的,但测试了很久,中文乱码部分始终不完全解决,最终发现原来freetds有win版本的,实践后,上述源码编译都可以通过.。

C语言 使用freetds连接sql server读取,win下可用

发表评论
留言与评论(共有 0 条评论) “”
   
验证码:

相关文章

推荐文章