C语言 使用freetds连接sql server读取,win下可用
以下是源码,使用sql server的master数据库来测试。读取,
Win下编译器是TDM-GCC-64,: gcc version 10.3.0 (tdm64-1)
Li
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 \t\n",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\n"); //在标准错误中输出信息 exit(EXIT_FAILURE); //进程异常退出 }else{ //如果连接成功 printf("Connect success\n"); } 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\tname: %s\t no: %s\n",k,UserName,CardNo); k=k+1; strcat(query,shustr); } printf("%s\n ok \n",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 去这里下载, // 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下使用Mssq字符串函数,网上都C语言版本的都是使用odbc的,但测试了很久,中文乱码部分始终不完全解决,最终发现原来freetds有win版本的,实践后,上述源码编译都可以通过.。 (编辑:晋中站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |