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

前言

使用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<

思路:

提取 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,以后有什么好的方法再加以精炼。

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

 

 

你可能感兴趣的:(Visual,C++)