VC++数据库操作-像powerbuilder一样写sql脚本

本文介绍了如何在VC++6.0中更方便地操作数据库,通过两种版本的SQL调用方法,简化API使用。第一种方法直接传递变量地址,第二种方法使用结构体数组保存变量和类型信息,避免了顺序错误。作者还提供了一种宏定义的方式来组织参数,提高了代码可读性。最后,作者总结了这种方法在SQL调用中的便利性,并表示会继续寻找更好的解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

使用VC++6.0来操作api是非常方便的,但是用来操作数据库就一点不方便了。看着powerbuilder写SQL真的好方便。

想着能用VC使用数据库操作方便一点就好了。

实现

版本一

SQL:

select id,name,birthday from userinfo where rowid = 10;

函数 :

int dbselect(LPCSTR lpSQLText,...)

VC调用:

int id ;

String name;

DateTime dt ;

long rowid = 1001;

dbselect("select id,name,birthday into :i,:s,:d from userinfo where rowid=%d",&id,&name,&dt,rowid)

//版本1.0
/////////////////////////////////////////////////////////////////////
Transaction::dbinit();
	sqlca.ServerName	= "127.0.0.1,9527";
	sqlca.DataBase		= "NewHis"; 
	sqlca.UserId		= "sa";
	sqlca.PassWord		= "00000";
	sqlca.LoginTime		= 10;
	sqlca.AppName		= "ding..";

    dbconnect(sqlca);
 
 	String strID;
	String strUserID;
	String strUserName;

	int id = 1  ; 
   	dbselect("select id,userid,username  into :s,:s,:d from userinfo where id = %i" ,&strID,&strUserID,&strUserName, id);
// 
	 String strResult; 
	strResult.Format("id:%s user:%s name:%s", strID,strUserID,strUserName);
	cout<< (LPCSTR)strResult<<endl ; 
	
	cout<<"dbcommand:"<<endl;
	
	dbcommand("update userinfo set userid ='%s' where  id  = %d","管理员1",1);


	disconnect(sqlca);

思路:

提取 into .....from 之间的标识符,可以识别变量的类型,

arglist中的参数,按序列传递变量的地址,这样写的方法很简单,但是变量多了,容易出错,容易弄错顺序。

版本2

int dbselect(Addr[] & p,LPCSTR lpSqlText,...)

调用:

int id ;

String name;

DateTime dt ;

Addr a;

a[0].addr = &id;

a[0].type = int;

a[1].addr = &name;

a[1].type = String;

dbselect(a,"select id ,name,birthday from userinfo where rowid=%d",1001)

​

//版本2.0
/////////////////////////////////////////////////////////////////////
int id  =10; 
 DEF(ADDRINFO,adr);
 VAR(adr,int,iUserId ); //新变量
 VAR(adr,CString,strUserName); 
 REF(adr,int,id); //已有的变量
 dbselect(adr,"select id,name,birth From useirnfo where id =%d",100);

思路:

把参数和类型和变量地址放到数组中addr,这样就可以清楚一点了。

再定义一个宏

#def var(a,t,n)  t n;a.pushargs(t,n);

实际调用 :

var(a,int ,id);

var(a,string,name);

var(a,DateTime,birth)

dbselect(a,"select * from userinfo where rowid = %d",1001)

总结

这是最常用到的SQL调用,这样我可以比较方便的调用SQL,以后有什么好的方法再加以精炼。

 在这里留个备注,好记性不如烂笔头:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿峰的编程博客

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值