首页 » SEO优化 » phpfreetds技巧_C措辞 运用freetds连接sql server读取win下可用

phpfreetds技巧_C措辞 运用freetds连接sql server读取win下可用

访客 2024-10-31 0

扫一扫用手机浏览

文章目录 [+]

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

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

phpfreetds技巧_C措辞 运用freetds连接sql server读取win下可用 phpfreetds技巧_C措辞 运用freetds连接sql server读取win下可用 SEO优化

Linux下是gcc:: gcc version 6.3.0 20170516

phpfreetds技巧_C措辞 运用freetds连接sql server读取win下可用 phpfreetds技巧_C措辞 运用freetds连接sql server读取win下可用 SEO优化
(图片来自网络侵删)

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

#include <stdio.h>

#include <string.h>

#include <stdlib.h>

#include <unistd.h>

#include <wchar.h>

#include <locale.h>

#include<sybfront.h>

#include<sybdb.h>

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 去这里下载, 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语言启动程序,编程世界的起点与探索

随着信息技术的飞速发展,编程已经成为了当今社会的一项重要技能。而C语言作为一门历史悠久的编程语言,以其简洁、高效、可移植性强等特点...

SEO优化 2024-12-05 阅读0 评论0

C语言程序之美,代码与逻辑的交响曲

在计算机科学的世界里,C语言被誉为“程序员的摇篮”。自1972年诞生以来,C语言以其简洁、高效、灵活等特点,赢得了无数程序员的青睐...

SEO优化 2024-12-05 阅读0 评论0