!!!. 数据库的编程(ADO) --- 三种sql语句执行的不同
2011-08-29 23:18
519 查看
Description:
一. 数据库的编程(ADO)
要用ADO连接数据的头文件中加入 #import "c:\Program Files\Common Files\System\ado\msado15.dll" no_namespace rename("EOF","adoEOF") rename("BOF","adoBOF")
// 初始化OLE/COM库环境 _ConnectionPtr m_pConnection;
::CoInitialize(NULL);
char buf[256],server[256],datebase[256],uid[256],pwd[256];char str[255];
GetCurrentDirectory(255,str);//获得当前目录
strcat(str,"\\dbinfo.ini");int len0=GetPrivateProfileString("dbinfo","Provider","No Text",buf,256,str);//读取配置文件中的数据库连接信息
int len1=GetPrivateProfileString("dbinfo","server","No Text",server,256,str);
int len2=GetPrivateProfileString("dbinfo","Database","No Text",datebase,256,str);
int len3=GetPrivateProfileString("dbinfo","uid","No Text",uid,256,str);
int len4=GetPrivateProfileString("dbinfo","pwd","No Text",pwd,256,str); try
{
// 创建Connection对象
m_pConnection.CreateInstance("ADODB.Connection");
// 设置连接字符串,必须是BSTR型或者_bstr_t类型
_bstr_t strConnect = "Provider=";
strConnect =strConnect+buf;
strConnect =strConnect+";Server=";
strConnect =strConnect+server;
strConnect =strConnect+";Database=";
strConnect =strConnect+datebase;
strConnect =strConnect+";uid=";
strConnect =strConnect+uid;
strConnect =strConnect+";pwd=";
strConnect =strConnect+pwd; m_pConnection-[/b]>Open(strConnect,"","",adModeUnknown);//连接到指定的数据库
}
// 捕捉异常
catch(_com_error e)
{
// 显示错误信息
AfxMessageBox(e.Description());
}
执行无返回值[/b](记录集)的SQL语句,Insert Update等无返回值[/b]的语句 --- 如何知道用pConnection能否获取存取过程的返回值(http://zhidao.baidu.com/question/202870363.html)
// Connection对象的Execute[/b]方法:(_bstr_t CommandText, // VARIANT * RecordsAffected, long Options )
// 其中CommandText是命令字串,通常是SQL命令。
// 参数RecordsAffected是操作完成后所影响的行数,
// 参数Options表示CommandText的类型:adCmdText-文本命令;adCmdTable-表名
// adCmdProc-存储过程;adCmdUnknown-未知
m_pConnection-[/b]>Execute[/b](bstrSQL,NULL,adCmdText);
执行有返回值[/b](记录集)的SQL语句
_RecordsetPtr m_pRecordset;
// 创建记录集对象
m_pRecordset.CreateInstance(__uuidof(Recordset));
// 返回表中的记录
m_pRecordset->Open(bstrSQL,m_pConnection.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);
CListCtrl m_list1;//记录显示在CListCtrl中
if(!m_pRecordset->adoEOF) //如果记录不为空
{
while(!m_pRecordset->adoEOF)
{
m_list1.InsertItem(i,(LPCTSTR)(_bstr_t)m_pRecordset->GetCollect("ID"));
m_list1.SetItemText(i,1,(LPCTSTR)(_bstr_t)m_pRecordset->GetCollect("tintCallType"));
m_list1.SetItemText(i,2,(LPCTSTR)(_bstr_t)m_pRecordset->GetCollect("tintHangUp"));
_variant_t vMaxid(m_pRecordset->GetCollect("strCallingNmb"));
if(vMaxid.vt==VT_NULL)
vMaxid="";
m_list1.SetItemText(i,3,(LPCTSTR)(_bstr_t)vMaxid);
_variant_t vMaxid0(m_pRecordset->GetCollect("strCalledNmb"));
if(vMaxid0.vt==VT_NULL)
vMaxid0="";
m_list1.SetItemText(i,4,(LPCTSTR)(_bstr_t)vMaxid0);
_variant_t vMaxid1(m_pRecordset->GetCollect("strOriginNmb"));
if(vMaxid1.vt==VT_NULL) //此字段在数据库中为NULL值
vMaxid1=""; i++;//CListCtrl中的第i行显示此记录
m_pRecordset->MoveNext();//下一条记录
}
}
m_pRecordset->Close();//记录集读取完毕,关闭记录集
执行带参数无返回值[/b](一个或者多个记录集)的存储过程
_CommandPtr m_pnewCommand;
m_pnewCommand.CreateInstance("ADODB.Command"); m_pnewCommand->ActiveConnection=m_pConnection;
m_pnewCommand->CommandType=adCmdStoredProc;
m_pnewCommand->CommandText=_bstr_t("proc_deleteSMCBQueue");
unsigned char newflag = 1;
_ParameterPtr Pnewflag,PnewrecordID;
Pnewflag.CreateInstance(__uuidof(Parameter));
PnewrecordID.CreateInstance(__uuidof(Parameter));
CString newst="";
newst.Format("%d",recordID);
Pnewflag=m_pnewCommand->CreateParameter(_bstr_t("flag"),adTinyInt,adParamInput,1,(_variant_t)newflag);
m_pnewCommand->Parameters->Append(Pnewflag);
PnewrecordID=m_pnewCommand->CreateParameter(_bstr_t("recordID"),adInteger,adParamInput,4,(_variant_t)(_bstr_t)newst);
m_pnewCommand->Parameters->Append(PnewrecordID);
try
{
m_pnewCommand->Execute[/b](NULL,NULL,adCmdStoredProc);
}
catch(...)
{
}
执行有参数有返回记录集的存储过程(其实就是执行有返回值[/b](记录集)的SQL语句)
CString sqlrecord ="exec proc_getSMCBQueue 1";
try
{
m_pRecordset = m_pConnection-[/b]>Execute[/b]((_bstr_t)sqlrecord,NULL,adCmdText);
}
catch(...)
{
}
今天就记一下VC关于数据库的编程吧,下次再记VC关于网络的编程吧!
只是真正的用_CommandPtr m_pnewCommand执行存储过程返回一个或者多个记录集,再分别对各记录集进行操作还没有实现啊
一. 数据库的编程(ADO)
要用ADO连接数据的头文件中加入 #import "c:\Program Files\Common Files\System\ado\msado15.dll" no_namespace rename("EOF","adoEOF") rename("BOF","adoBOF")
// 初始化OLE/COM库环境 _ConnectionPtr m_pConnection;
::CoInitialize(NULL);
char buf[256],server[256],datebase[256],uid[256],pwd[256];char str[255];
GetCurrentDirectory(255,str);//获得当前目录
strcat(str,"\\dbinfo.ini");int len0=GetPrivateProfileString("dbinfo","Provider","No Text",buf,256,str);//读取配置文件中的数据库连接信息
int len1=GetPrivateProfileString("dbinfo","server","No Text",server,256,str);
int len2=GetPrivateProfileString("dbinfo","Database","No Text",datebase,256,str);
int len3=GetPrivateProfileString("dbinfo","uid","No Text",uid,256,str);
int len4=GetPrivateProfileString("dbinfo","pwd","No Text",pwd,256,str); try
{
// 创建Connection对象
m_pConnection.CreateInstance("ADODB.Connection");
// 设置连接字符串,必须是BSTR型或者_bstr_t类型
_bstr_t strConnect = "Provider=";
strConnect =strConnect+buf;
strConnect =strConnect+";Server=";
strConnect =strConnect+server;
strConnect =strConnect+";Database=";
strConnect =strConnect+datebase;
strConnect =strConnect+";uid=";
strConnect =strConnect+uid;
strConnect =strConnect+";pwd=";
strConnect =strConnect+pwd; m_pConnection-[/b]>Open(strConnect,"","",adModeUnknown);//连接到指定的数据库
}
// 捕捉异常
catch(_com_error e)
{
// 显示错误信息
AfxMessageBox(e.Description());
}
执行无返回值[/b](记录集)的SQL语句,Insert Update等无返回值[/b]的语句 --- 如何知道用pConnection能否获取存取过程的返回值(http://zhidao.baidu.com/question/202870363.html)
// Connection对象的Execute[/b]方法:(_bstr_t CommandText, // VARIANT * RecordsAffected, long Options )
// 其中CommandText是命令字串,通常是SQL命令。
// 参数RecordsAffected是操作完成后所影响的行数,
// 参数Options表示CommandText的类型:adCmdText-文本命令;adCmdTable-表名
// adCmdProc-存储过程;adCmdUnknown-未知
m_pConnection-[/b]>Execute[/b](bstrSQL,NULL,adCmdText);
执行有返回值[/b](记录集)的SQL语句
_RecordsetPtr m_pRecordset;
// 创建记录集对象
m_pRecordset.CreateInstance(__uuidof(Recordset));
// 返回表中的记录
m_pRecordset->Open(bstrSQL,m_pConnection.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);
CListCtrl m_list1;//记录显示在CListCtrl中
if(!m_pRecordset->adoEOF) //如果记录不为空
{
while(!m_pRecordset->adoEOF)
{
m_list1.InsertItem(i,(LPCTSTR)(_bstr_t)m_pRecordset->GetCollect("ID"));
m_list1.SetItemText(i,1,(LPCTSTR)(_bstr_t)m_pRecordset->GetCollect("tintCallType"));
m_list1.SetItemText(i,2,(LPCTSTR)(_bstr_t)m_pRecordset->GetCollect("tintHangUp"));
_variant_t vMaxid(m_pRecordset->GetCollect("strCallingNmb"));
if(vMaxid.vt==VT_NULL)
vMaxid="";
m_list1.SetItemText(i,3,(LPCTSTR)(_bstr_t)vMaxid);
_variant_t vMaxid0(m_pRecordset->GetCollect("strCalledNmb"));
if(vMaxid0.vt==VT_NULL)
vMaxid0="";
m_list1.SetItemText(i,4,(LPCTSTR)(_bstr_t)vMaxid0);
_variant_t vMaxid1(m_pRecordset->GetCollect("strOriginNmb"));
if(vMaxid1.vt==VT_NULL) //此字段在数据库中为NULL值
vMaxid1=""; i++;//CListCtrl中的第i行显示此记录
m_pRecordset->MoveNext();//下一条记录
}
}
m_pRecordset->Close();//记录集读取完毕,关闭记录集
执行带参数无返回值[/b](一个或者多个记录集)的存储过程
_CommandPtr m_pnewCommand;
m_pnewCommand.CreateInstance("ADODB.Command"); m_pnewCommand->ActiveConnection=m_pConnection;
m_pnewCommand->CommandType=adCmdStoredProc;
m_pnewCommand->CommandText=_bstr_t("proc_deleteSMCBQueue");
unsigned char newflag = 1;
_ParameterPtr Pnewflag,PnewrecordID;
Pnewflag.CreateInstance(__uuidof(Parameter));
PnewrecordID.CreateInstance(__uuidof(Parameter));
CString newst="";
newst.Format("%d",recordID);
Pnewflag=m_pnewCommand->CreateParameter(_bstr_t("flag"),adTinyInt,adParamInput,1,(_variant_t)newflag);
m_pnewCommand->Parameters->Append(Pnewflag);
PnewrecordID=m_pnewCommand->CreateParameter(_bstr_t("recordID"),adInteger,adParamInput,4,(_variant_t)(_bstr_t)newst);
m_pnewCommand->Parameters->Append(PnewrecordID);
try
{
m_pnewCommand->Execute[/b](NULL,NULL,adCmdStoredProc);
}
catch(...)
{
}
执行有参数有返回记录集的存储过程(其实就是执行有返回值[/b](记录集)的SQL语句)
CString sqlrecord ="exec proc_getSMCBQueue 1";
try
{
m_pRecordset = m_pConnection-[/b]>Execute[/b]((_bstr_t)sqlrecord,NULL,adCmdText);
}
catch(...)
{
}
今天就记一下VC关于数据库的编程吧,下次再记VC关于网络的编程吧!
只是真正的用_CommandPtr m_pnewCommand执行存储过程返回一个或者多个记录集,再分别对各记录集进行操作还没有实现啊
相关文章推荐
- 在ADO.NET中使用参数化SQL语句访问不同数据库时的差异
- C#一次连接数据库执行多条sql语句(三种方法)
- ADO+MFC数据库编程常用SQL语句
- 奇怪!同一条sql语句在数据库和代码中执行结果不同?!当然是人错了 ……
- .NET数据库编程求索之路--3.使用ADO.NET实现(SQL语句篇)(1)
- .NET数据库编程求索之路--3.使用ADO.NET实现(SQL语句篇)(2)
- VC ADO 数据库操作 SQL语句执行
- C#一次连接数据库执行多条sql语句(三种方法)
- 【数据库_Postgresql】实体类映射问题之不执行sql语句
- 利用SQL语句对不同数据库进行高效果分页
- 数据库编程中针对c++的构造sql语句的写法
- C# 执行多条SQL更新语句,实现数据库事务
- 附加数据库失败 执行Transact-SQL语句或批处理时发生了异常
- 关于数据库DBM不同造成的SQL语句差异
- 不同数据库sql查询表字段以及结构的语句
- 数据库自动备份按照日期命名执行的sql语句
- 数据库中sql语句执行效率之议
- Statement批量执行sql语句,批量操作数据库,提高数据库效率
- 执行一条sql语句update多条不同值的记录实现思路
- 优化SQL查询:如何写出高性能SQL语句1、首先要搞明白什么叫执行计划?执行计划是数据库根据SQL