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

📄 adoconn.cpp

📁 本网站是一个库存管理系统
💻 CPP
字号:
// ADOConn.cpp: implementation of the ADOConn class.

#include "stdafx.h"
#include "ADOConn.h"

ADOConn::ADOConn() // Construction
{

}

ADOConn::~ADOConn() // Destruction
{

}

void  ADOConn::OnInitADOConn() // 初始化—连接数据库
{
	::CoInitialize(NULL); // 初始化OLE/COM库环境 
  
	try
	{
		m_pConnection.CreateInstance("ADODB.Connection"); // 创建Connection对象
		// 设置连接字符串,必须是BSTR型或者_bstr_t类型
		_bstr_t strConnect = "Provider=SQLOLEDB; Server=ntserver;Database=Stock; uid=sa; pwd=sa;";
		m_pConnection->Open(strConnect,"","",adModeUnknown); // 打开连接字串
	}
	catch (_com_error e) // 捕捉异常
	{
		MessageBox(NULL, e.Description(), TEXT("Error"), MB_OK | MB_ICONERROR);  // 显示错误信息
	}
}

_RecordsetPtr&  ADOConn::GetRecordSet(_bstr_t bstrSQL) // 执行查询
{
	try
	{
		// 连接数据库,如果Connection对象为空,则重新连接数据库
		if (m_pConnection == NULL)
			OnInitADOConn();
		m_pRecordset.CreateInstance(__uuidof(Recordset)); // 创建记录集对象
		// 取得表中的记录
		m_pRecordset->Open(bstrSQL,m_pConnection.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);
	}
	catch (_com_error e) // 捕捉异常
	{
		MessageBox(NULL, e.Description(), TEXT("Error"), MB_OK | MB_ICONERROR);  // 显示错误信息
	}
	
	return m_pRecordset; // 返回记录集
}
 
BOOL ADOConn::ExecuteSQL(_bstr_t bstrSQL) // 执行SQL语句,Insert Update _variant_t
{
	//	_variant_t RecordsAffected;

	try
	{
		// 连接数据库,如果Connection对象为空,则重新连接数据库
		if (m_pConnection == NULL)
			OnInitADOConn();
		// Connection对象的Execute方法:(_bstr_t CommandText, 
		// VARIANT * RecordsAffected, long Options ) 
		// 其中CommandText是命令字串,通常是SQL命令。
		// 参数RecordsAffected是操作完成后所影响的行数, 
		// 参数Options表示CommandText的类型:adCmdText-文本命令;adCmdTable-表名
		// adCmdProc-存储过程;adCmdUnknown-未知
		m_pConnection->Execute(bstrSQL,NULL,adCmdText); // 执行命令字串

		return true; // 执行命令字串成功,返回true
	}
	catch (_com_error e)
	{
		MessageBox(NULL, e.Description(), TEXT("Error"), MB_OK | MB_ICONERROR);  // 显示错误信息
		
		return false; // 执行命令字串失败,返回false
	}
}

void ADOConn::ExitConnect() // 退出数据库连接
{
	// 关闭记录集
	if (m_pRecordset != NULL)
		m_pRecordset->Close();
	// 关闭连接
	m_pConnection->Close();
	// 释放OLE/COM库环境
	::CoUninitialize();
}

void ADOConn::Backup() // 备份数据库
{
	// 删除Stock.bak文件;
	SHFILEOPSTRUCT   Op; 
	ZeroMemory(&Op,   sizeof(Op)); 

	TCHAR   ToBuf[MAX_PATH]; 
	TCHAR   FromBuf[MAX_PATH]; 
	ZeroMemory(ToBuf,   sizeof(ToBuf)); 
	ZeroMemory(FromBuf,   sizeof(FromBuf)); 
	lstrcpy(FromBuf,   "c:\\Stock.bak"); 

	Op.hwnd   =   NULL; 
	Op.pFrom   =   FromBuf; 
	Op.pTo   =   ToBuf; 
	Op.fFlags   =   FOF_NOCONFIRMATION   |   FOF_NOCONFIRMMKDIR   |   FOF_NOERRORUI; 
	Op.fAnyOperationsAborted   =   FALSE; 
	Op.hNameMappings   =   NULL; 
	Op.lpszProgressTitle   =   NULL; 
	Op.wFunc   =   FO_DELETE; 

	SHFileOperation(&Op); 


	OnInitADOConn(); //连接数据库

	_bstr_t vSQL;
	vSQL = "backup database Stock to disk= 'C:\\Stock.bak'"; 
	ExecuteSQL(vSQL); // 执行命令字串
	
	ExitConnect(); //关闭数据库

}

void ADOConn::Restore() // 还原数据库
{
	// @@@@@@@@@@@@@@@@@@@  创建到Master数据库的连接  

	try
	{
		m_pConnection.CreateInstance("ADODB.Connection"); // 创建Connection对象
		// 设置连接字符串,必须是BSTR型或者_bstr_t类型
		_bstr_t strConnect = "Provider=SQLOLEDB; Server=(local);Database=master; uid=sa; pwd=sa;";
	   	m_pConnection->Open(strConnect,"","",adModeUnknown); // 打开连接字串
	}
	catch (_com_error e) // 捕捉异常
	{
		MessageBox(NULL, e.Description(), TEXT("Error"), MB_OK | MB_ICONERROR);  // 显示错误信息
	}

	_bstr_t vSQL;

	//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@清除Stock数据库进程
	m_pConnection->Execute("DECLARE @DBNAME VARCHAR(100); "
		                   "SET @DBNAME='Stock'; /*要关闭进程的数据库名*/"
						   "DECLARE @S NVARCHAR(1000);"
						   "DECLARE TB CURSOR LOCAL FOR \r\n"
						   "SELECT S='KILL '+CAST(SPID AS VARCHAR)"
						   " FROM MASTER..SYSPROCESSES "
						   "WHERE DBID=DB_ID(@DBNAME);"
						   "OPEN TB ;"
						   "FETCH NEXT FROM TB INTO @S;"
						   "WHILE @@FETCH_STATUS=0"
						   "BEGIN \r\n"
						   "EXEC(@S);"
						   "FETCH NEXT FROM TB INTO @S;"
						   "END \r\n"
						   "CLOSE TB;"
						   "DEALLOCATE TB;",
						   NULL,
						   adCmdText);

	//删除数据库
	vSQL = "drop database Stock";
	m_pConnection->Execute(vSQL, NULL, adCmdText);

	//恢复数据库
	vSQL = "restore database Stock from disk= 'C:\\Stock.bak'"; 
	m_pConnection->Execute(vSQL,NULL,adCmdText); // 执行命令字串
	
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -