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版本的,实践后,上述源码编译都可以通过.。
留言与评论(共有 0 条评论) “” |