Linux下用freetds执行SqlServer的sql语句和存储过程
Windows下访问Sqlserver很方便,特别是用ADO,即便是用C++写代码,也没怎么感觉麻烦,如果是用C#的话,写起来估计更是飞一般的感觉,可现在我要处理的问题是在Linux下访问SqlServer,执行sql语句和存储过程……
好,不废话了,下面开工。
一、包含头文件
#include <sybfront.h> //freetds
#include <sybdb.h> //freetds
二、执行sql语句或存储过程
1、查询类
1.1 核心代码:
bool queryCmd(DBPROCESS *dbprocess,const char* strSql) { dbcmd(dbprocess,strSql); if(dbsqlexec(dbprocess) == FAIL) { printf("Query error.\n"); returnfalse; } DBINT result_code; char infArr[MaxColumnNums][MaxColumnSize]; int retCode = 1; while ((result_code = dbresults(dbprocess)) != NO_MORE_RESULTS) { if (result_code == SUCCEED) { int i=1; int sz = 0; while(true) { //retCode = dbbind(dbprocess,i++, CHARBIND, (DBCHAR)0, (BYTE*)infArr[i]); retCode = dbbind(dbprocess,i, CHARBIND, (DBINT)0, (BYTE*)infArr[i]); if(retCode != 1) break; i++; } sz = i; while (dbnextrow(dbprocess) != NO_MORE_ROWS) { for(i=1; i<=sz; i++) { //printf("%s ",infArr[i]); cout<<infArr[i]<<" ";//<<endl; memset(infArr[i],0,sizeof(infArr[i])); } cout<<endl; } } } returntrue; }
1.2 直接执行Sql语句
queryCmd(dbprocess, "select * from table");
1.3 不带参数的存储过程
创建存储过程如下:
createproctestPro
as
select*fromstu;
go
调用如下:
queryCmd(dbprocess, "exec testPro");
1.4 带参数的存储过程
创建存储过程如下:
createprocgetPro1(@numint)
as
select*fromstuwhereStuID=@num;
go
调用如下:
queryCmd(dbprocess, "exec getPro1 1003");
2、更新类
2.1 核心代码:
bool updateCmd(DBPROCESS *dbprocess,const char* strSql) { dbcmd(dbprocess,strSql); if(dbsqlexec(dbprocess) == FAIL) { printf("error : update fail\n"); returnfalse; } returntrue; }
2.2 直接执行sql语句
updateCmd(dbprocess,"insert into stu(StuID, Name, Age) values(888,'Mike',24)");
2.3不带参数的存储过程
创建存储过程如下:
createprocdelPro1
as
deletefromstuwhereStuID=888
go
调用如下:
updateCmd(dbprocess,"exec delPro1");
2.4 带参数的存储过程
创建存储过程如下:
createprocdelPro2(@numint)
as
deletefromstuwhereStuID=@num
go
调用如下:
updateCmd(dbprocess,"exec delPro2 888");
三、编译选项
比如源文件为test2.cpp,freetds的安装路径为usr/local/freetds ,则如下编译:
g++ -g test2.cpp -o test2 -L/usr/local/freetds/lib -lsybdb -I/usr/local/freetds/include
PS:环境 freetds 0.91 + Sqlserver 2008
好,就这些了,希望对你有帮助。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)