⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 adodb.cpp

📁 vc++ 利用ADO访问MYSQL数据
💻 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 + -