📄 adodb.cpp
字号:
// AdoDb.cpp: implementation of the CAdoDb class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "student.h"
#include "AdoDb.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CAdoDb::CAdoDb()
{
::CoInitialize(NULL);//初始化OLE/COM库
m_pConnection=NULL;//初始化连接指针变量
nResultCol=0;
nResultRow=0;
}
CAdoDb::~CAdoDb()
{
if(m_pConnection)
m_pConnection->Close();//关闭数据库连接
m_pConnection=NULL;
::CoUninitialize();//释放OLE/COM库
}
//连接数据库
BOOL CAdoDb::AdoConnection(CString strConnection)
{
m_pConnection.CreateInstance(__uuidof(Connection));
m_pConnection->ConnectionTimeout=10;//连接延时时间为10秒
try
{
m_pConnection->Open((LPCTSTR)strConnection,"","",adModeUnknown);
}
catch(_com_error e)
{
AfxMessageBox("数据库连接失败!");
return FALSE;
}
return TRUE;
}
//查询记录
BOOL CAdoDb::ExeQureSql(CString sql)
{
m_pRecordset.CreateInstance(__uuidof(Recordset));//创建对象实例
try
{
m_pRecordset->Open((_variant_t)sql,// 查询聊天表中所有字段
m_pConnection.GetInterfacePtr(), // 获取库的连接指针
adOpenDynamic,
adLockOptimistic,
adCmdText);
nResultRow=m_pRecordset->GetRecordCount();//取得记录集行数
nResultCol=m_pRecordset->Fields->GetCount();//获得纪录集总列数
//--------------取得记录集的行数和列数----------------------//
//int nrow = m_pRecordset->GetRecordCount();//行数
//int ncol = m_pRecordset->GetFields()->Count;//列数
/* int i=0;
CString str;
while(!m_pRecordset->adoEOF)
{
for (int j = 0; j < nResultCol; j++) //取一列数据
{
_variant_t vValue = m_pRecordset->Fields->Item[(long)j]->Value;//取得当前记录字段数据
if(vValue.vt != 1) //数据非空
{
int type = vValue.vt;
VARIANTARG vValue1;
if(VariantChangeType(&vValue1, &vValue, 0, VT_BSTR) == S_OK)//转换数据类型(为字符串)
str=vValue1.bstrVal; //保存结果值到临时变量str中
}
if(pdata.GetSize())
pdata[i*nResultCol+j]=str; //保存结果到数组中
m_pRecordset->MoveNext(); //移动记录集指针到下一行
i++;
nResultRow=i;
pdata.FreeExtra();//释放多余的内存空间
}
}*/
}
catch(_com_error e)
{
AfxMessageBox("执行SQL语句出错!");
return FALSE;
}
return TRUE;
}
//非查询类的函数
BOOL CAdoDb::ExeNoneQureSql(CString sql)
{
try
{
_variant_t RecordsAffectted;
m_pConnection->Execute((_bstr_t)sql,&RecordsAffectted,adCmdText);
AfxMessageBox("操作成功!");
}
catch(_com_error e)
{
AfxMessageBox("执行SQL语句出错!");
return FALSE;
}
return TRUE;
}
void CAdoDb::CloseRecordset()
{
m_pRecordset->Close();
}
//取得查询记录中具体的数值
CString CAdoDb::GetRecVal(int row,int col)
{
m_pRecordset->GetCollect((long)col);//取得一列数据
_variant_t vValue;
VARIANTARG vValue1;
CString str;
// CStringArray *pdata=new CStringArray;//存放查询结果数组, 大小为row
CStringArray pdata;
for (int i=0;i<row;i++)
{
vValue=m_pRecordset->Fields->Item[(long)i]->Value;//取得指定列的每行字段值
if (vValue.vt!=1)//数据非空
{
int type=vValue.vt;
if(VariantChangeType(&vValue1, &vValue, 0, VT_BSTR)==S_OK) //数据转换为字符串
str=vValue1.bstrVal; //保存结果到临时变量str中
}
pdata[i]=str;////保存结果到数组中
// pdata->Add(str);
m_pRecordset->MoveNext(); //移动记录集指针到下一行
i++;
}
CString str1;
str1=pdata[row];
//pdata->FreeExtra();//释放多余的内存空间
pdata.RemoveAll();
// delete pdata; //释放内存
// pdata = NULL;
return TRUE;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -