VC使用数据库技巧,第1张

VC使用数据库技巧,第2张

一、数据库编程(ADO)
将# import " c:\ program files \ common files \ system \ ADO \ msado15 . dll " no _ namespace rename(" EOF ")添加到用ADO连接数据的头文件中," adoeof") rename ("BOF "," adobof ")
/initialize OLE/COM库环境_ ConnectionPtr m _ pConnection
::CoInitialize(NULL);
char buf[256],server[256],database[256],uid[256],pwd[256];char str[255];
GetCurrentDirectory(255,str);//获取当前目录
strcat(str," \ \ dbinfo . ini ");int len 0 = GetPrivateProfileString(" dbinfo "," Provider "," No Text ",buf,256,str);//读取配置文件
intlen 1 = getPrivateProfileString(" dbinfo "," server "," notext ",server,256,str)中的数据库连接信息;
int len 2 = GetPrivateProfileString(" dbinfo "," Database "," No Text ",datebase,256,str);
int len 3 = GetPrivateProfileString(" dbinfo "," uid "," No Text ",uid,256,str);
int len 4 = GetPrivateProfileString(" dbinfo "," pwd "," No Text ",pwd,256,str);try
{
/Create Connection对象
m _ p Connection . Create instance(" adodb . Connection ");
//设置连接字符串,该字符串必须是BSTR或_ bstr _ T
_ BSTR _ T str connect = " provider = ";
str connect = str connect+buf;
str connect = str connect+";服务器= ";
str connect = str connect+server;
str connect = str connect+";数据库= ";
str connect = str connect+database;
str connect = str connect+";uid = ";
str connect = str connect+uid;
str connect = str connect+";pwd = ";
str connect = str connect+pwd;m_pConnection->Open(strConnect,"","",admode unknown);//连接到指定的数据库
}
/catch异常
catch(_ com _ errore)
{
/Show错误消息
afxmessagebox(e . description());
}
执行无返回值的SQL语句(记录集),Insert Update等无返回值的语句
/connection对象的Execute方法:(_ bstr _ tCommandText,//variant *受影响的记录,长选项)
/其中commandtext
//参数records affected是操作完成后受影响的行数,
//参数options表示CommandText的类型:adCmdText- text命令;AdCmdTable-表名
// adCmdProc-存储过程;ADC未知-unknown
m _ p connection-> execute(bstr SQL,null,ADC mdtext);
执行返回值为(记录集)
_ recordset ptr m _ p recordset的SQL语句;
//创建一个记录集对象
m _ p recordset . Create instance(_ _ uuidof(recordset));
//返回表中的记录
m _ p Recordset-> open(bstr SQL,m _ p connection.getinterfaceptr(),adopen dynamic,adlockoptimal,ADC mdtext);
clist ctrl m _ list 1;//如果(!M_pRecordset->adoEOF) //如果记录不是空
{
while(!m _ pRecordset-> adoof)
{
m _ list 1。InsertItem(i,(LPCTSTR)(_ bstr _ t)m _ pRecordset-> get collect(" ID "));
m_list1。SetItemText(i,1,(LPCTSTR)(_ bstr _ t)m _ pRecordset-> get collect(" tintCallType "));
m_list1。SetItemText(i,2,(LPCTSTR)(_ bstr _ t)m _ pRecordset-> get collect(" tintHangUp "));

_ variant _ t vMaxid(m _ pRecordset-> get collect(" strcallingmb "));
if(vMaxid . VT = = VT _ NULL)
vMaxid = " ";
m_list1。SetItemText(i,3,(LPCTSTR)(_ bstr _ t)vMaxid);

_ variant _ t vmaxid 0(m _ pRecordset-> get collect(" strCalledNmb "));
if(vmaxid 0 . VT = = VT _ NULL)
vmaxid 0 = " ";
m_list1。SetItemText(i,4,(LPCTSTR)(_ bstr _ t)vmaxid 0);

_ variant _ t vmaxid 1(m _ pRecordset-> get collect(" strOriginNmb "));
if(vmaxid 1 . vt = = vt _ NULL)//该字段在数据库中为NULL
vmaxid 1 = " ";i++;//CListCtrl中的第I行显示该记录
m _ pRecordset-> MoveNext();//下一条记录

}
}
m _ p记录集-> close();//读取完记录集后,关闭记录集
并执行带参数无返回值的存储过程(一个或多个记录集)
_ CommandPtr m _ pnewCommand;
m_pnewCommand。CreateInstance("ADODB。命令”);m _ pnewCommand-> active connection = m _ p connection;
m _ pnewCommand--> CommandType = adCmdStoredProc;
m _ pnewCommand--> CommandText = _ bstr _ t(" proc _ deletesmcqueue ");
unsigned char new flag = 1;
_ParameterPtr Pnewflag,PnewrecordID
Pnewflag。create instance(_ _ uuidof(Parameter));
PnewrecordID。create instance(_ _ uuidof(Parameter));

CString newst = " ";
新闻。格式(" %d ",recordID);
Pnewflag = m _ pnewCommand-> create parameter(_ bstr _ t(" flag "),adTinyInt,adParamInput,1,(_ variant _ t)new flag);
m_pnewCommand->参数->追加(Pnewflag);
PnewrecordID = m _ pnewCommand-> create parameter(_ bstr _ t(" recordID "),adInteger,adParamInput,4,(_ variant _ t)(_ bstr _ t)newst);
m_pnewCommand->参数-> Append(PnewrecordID);

try
{
m _ pnewCommand-> Execute(NULL,NULL,adCmdStoredProc);
}
Catch(...)
{
}
执行一个有参数并返回一个记录集的存储过程(实际上是执行一个有返回值的SQL语句(记录集))
cstring SQL Record = " ExecProc _ GetSMRecord "
try
{
m _ pRecordset = m _ p connection-> Execute((_ bstr _ t)SQL Record,NULL,ADC mdtext);
}
Catch(...)
{
}
今天记下VC关于数据库的编程,下次记下VC关于网络的编程!
只是_CommandPtr m_pnewCommand真正用来执行存储过程返回一个或多个记录集,然后分别对每个记录集进行操作。还没实现呢!

位律师回复
DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
白度搜_经验知识百科全书 » VC使用数据库技巧

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情