4,012
社区成员
发帖
与我相关
我的任务
分享
下面给出相关操作数据库的代码
先是ADO类的头文件
///////////////////////////ADO.h
#import "C:\Program Files\Common Files\System\ado\msado15.dll" no_namespace rename("EOF","adoEOF")
class CAdo
{
public:
_ConnectionPtr m_pConnection;
_RecordsetPtr m_pRecordset;
public:
CAdo();
virtual ~CAdo();
// 初始化—连接数据库
void OnInitADOConn();
// 执行查询
_RecordsetPtr& GetRecordSet(CString strSQL);
void close();
// bool Move(int nRecordNumber);
bool MovePrevious();
bool MoveLast();
bool MoveNext();
bool MoveFirst();
int GetRecordCount();
//void Open(CString TSQL);
bool Open(CString srecordset, UINT adCmd);
void GetErrors(_com_error eErrors);
CString GetFieldValue(CString Field);
void AddNew();
void Update();
bool Move(int nRecordNum);
void SetFieldValue(CString OField,CString value);
void ExecuteSQL(CString SQL);
bool recordeof();
bool recordbof();
void rstOpen(CString TSQL);
};
上面这么多函数 实际值用到了4个
/////////////////////////下面给出ADO.CPP对于本问题有关的函数
void CAdo::OnInitADOConn() //初始化ADO
{
// 初始化OLE/COM库环境
::CoInitialize(NULL);
try
{
// 创建Connection对象
m_pConnection.CreateInstance("ADODB.Connection");
// 设置连接字符串,必须是BSTR型或者_bstr_t类型
m_pConnection->Open((_bstr_t)strAdoConn,"","",adModeUnknown); //这里的strAdoConn是全局变量里面的,从InitInstance()获取,在文件上方声明的extern。
}
// 捕捉异常
catch(_com_error e)
{
// 显示错误信息
AfxMessageBox(e.Description());
}
}
void CAdo::ExecuteSQL(CString TSQL) //执行SQL语句
{
try
{
m_pConnection->Execute((_bstr_t)TSQL,NULL,adCmdText);
}
catch(_com_error e)
{
AfxMessageBox(e.Description());
}
}
_RecordsetPtr& CAdo::GetRecordSet(CString strSQL) // 执行查询
{
try
{
// 连接数据库,如果Connection对象为空,则重新连接数据库
if(m_pConnection==NULL)
OnInitADOConn();
// 创建记录集对象
m_pRecordset.CreateInstance(__uuidof(Recordset));
// 取得表中的记录
m_pRecordset->Open((_bstr_t)strSQL,m_pConnection.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);
}
// 捕捉异常
catch(_com_error e)
{
// 显示错误信息
AfxMessageBox(e.Description());
}
// 返回记录集
return m_pRecordset;
}
void CAdo::close() //关闭ADO
{
if(m_pRecordset!=NULL)
m_pRecordset->Close();
m_pConnection->Close();
m_pRecordset=NULL;
m_pConnection=NULL;
::CoUninitialize();
}
CAdo ado;
ado.OnInitADOConn();
CString seqid,executename,usemodule,useparameter,sql;
UpdateData(true); //更新读取m_EditProdSerial m_EditProdItem 两个CString变量用的
int i,listcount;
listcount=m_listctrl.GetItemCount(); //获取列表框有多少行 m_listctrl关联列表框控件
for(i=0;i<listcount;i++) //for循环 去执行SQL语句 把数据写进数据库里面。
{
//把第i行里面4列的数据全部读到CString变量里里面
seqid=m_listctrl.GetItemText(i,0);
executename=m_listctrl.GetItemText(i,1);
usemodule=m_listctrl.GetItemText(i,2);
useparameter=m_listctrl.GetItemText(i,3);
if(i==0) //在第一次操作的时候,先删除表里面的数据。
{
sql="Truncate Table ";
sql+="_"+m_EditProdSerial+"_"+m_EditProdItem;
ado.ExecuteSQL(sql); //清空表
}
sql="insert into ";
sql+="_"+m_EditProdSerial+"_"+m_EditProdItem;
sql+=" (seq_id,productserial,productitem,usemodule,useparameter,executename)values(";
sql+=seqid+",'"+m_EditProdSerial+"','"+m_EditProdItem+"','"+usemodule+"','"+useparameter+"','"+executename+"')";
//上面的SQL语句合起来的语句为以下这种形式
/*
insert into _A001_000002 (seq_id,productserial,productitem,usemodule,useparameter,executename)values(1,'A001','000002','电源1路','24;','设置电源24伏')
_A001_000002就是表名 productserial,productitem这两个变量组合起来就是表名
但是对于useparameter这个变量里面 可能有几百个字符。
*/
ado.ExecuteSQL(sql);
}
ado.close();