*请问一个关于ADO执行数据库的有关问题*
***********************请教一个关于ADO执行数据库的问题***********************
CDBExec::CDBExec(void)
{
::CoInitialize(NULL);
}
CDBExec::~CDBExec(void)
{
std::vector <PDB_CONN> ::iterator iter = m_vtDBConn.begin();
while(iter != m_vtDBConn.end())
{
(*iter)-> conn-> Close();
delete (*iter);
}
m_vtDBConn.clear();
m_Command.Release();
m_ParameterReturn.Release();
::CoUninitialize();
}
/*=========================================================================================*/
// 函数名称:InitializeConn
// 简要描述:将数据打包
//
// 参数描述
// 无参数
//
// 返回值:
// @类型: BOOL
// [true] 所有数据库连接初始化成功
// [false]非所有数据库连接初始化成功
/*=========================================================================================*/
BOOL CDBExec::InitializeConn()
{
char szPath[256];
::GetCurrentDirectory(256 , szPath);
strcat(szPath , "\\db.ini ");
CStdioFile file;
CFileException fileExp;
CString sDBName;
file.Open(szPath , CFile::modeRead , &fileExp);
CString sConnStr;
while(file.ReadString(sDBName))
{
PDB_CONN pConn = new DB_CONN();
pConn-> sDBName = sDBName;
pConn-> conn.CreateInstance(__uuidof(Connection));
pConn-> conn-> ConnectionTimeout = 5;
sConnStr.Format( "Provider=SQLOLEDB;Data Source=localhost;Initialize Catalog=%s;Trusted_Connection=yes; " , sDBName);
try
{
pConn-> conn-> Open(sConnStr.AllocSysString() , " ", " " , adModeUnknown);
}
catch(_com_error e)
{
std::vector <PDB_CONN> ::iterator iter;
while(iter != m_vtDBConn.end())
{
(*iter)-> conn-> Close();
delete (*iter);
}
m_vtDBConn.clear();
::CoUninitialize();
return FALSE;
}
m_vtDBConn.push_back(pConn);
}
file.Close();
m_Command.CreateInstance(__uuidof(Command));
m_ParameterReturn.CreateInstance(__uuidof(Parameter));
m_ParameterReturn-> Name = "@return ";
m_ParameterReturn-> Type = adInteger;
m_ParameterReturn-> Size = 4;
m_ParameterReturn-> Direction = adParamReturnValue;
m_ParameterReturn-> Value = (_variant_t)1;
m_Record.CreateInstance(__uuidof(Recordset));
return TRUE;
}
/*=========================================================================================*/
// 函数名称:GetConn
// 简要描述:根据数据库名取数据库连接
//
// 参数描述
// @参数类型 CString @参数名 sDBName @参数描述 数据库名
//
// 返回值:
// @类型: PDB_CONN
// 数据库连接对应的结构体
/*=========================================================================================*/
PDB_CONN CDBExec::GetConn(CString sDBName)
{
std::vector <PDB_CONN> ::iterator iter = m_vtDBConn.begin();
CDBExec::CDBExec(void)
{
::CoInitialize(NULL);
}
CDBExec::~CDBExec(void)
{
std::vector <PDB_CONN> ::iterator iter = m_vtDBConn.begin();
while(iter != m_vtDBConn.end())
{
(*iter)-> conn-> Close();
delete (*iter);
}
m_vtDBConn.clear();
m_Command.Release();
m_ParameterReturn.Release();
::CoUninitialize();
}
/*=========================================================================================*/
// 函数名称:InitializeConn
// 简要描述:将数据打包
//
// 参数描述
// 无参数
//
// 返回值:
// @类型: BOOL
// [true] 所有数据库连接初始化成功
// [false]非所有数据库连接初始化成功
/*=========================================================================================*/
BOOL CDBExec::InitializeConn()
{
char szPath[256];
::GetCurrentDirectory(256 , szPath);
strcat(szPath , "\\db.ini ");
CStdioFile file;
CFileException fileExp;
CString sDBName;
file.Open(szPath , CFile::modeRead , &fileExp);
CString sConnStr;
while(file.ReadString(sDBName))
{
PDB_CONN pConn = new DB_CONN();
pConn-> sDBName = sDBName;
pConn-> conn.CreateInstance(__uuidof(Connection));
pConn-> conn-> ConnectionTimeout = 5;
sConnStr.Format( "Provider=SQLOLEDB;Data Source=localhost;Initialize Catalog=%s;Trusted_Connection=yes; " , sDBName);
try
{
pConn-> conn-> Open(sConnStr.AllocSysString() , " ", " " , adModeUnknown);
}
catch(_com_error e)
{
std::vector <PDB_CONN> ::iterator iter;
while(iter != m_vtDBConn.end())
{
(*iter)-> conn-> Close();
delete (*iter);
}
m_vtDBConn.clear();
::CoUninitialize();
return FALSE;
}
m_vtDBConn.push_back(pConn);
}
file.Close();
m_Command.CreateInstance(__uuidof(Command));
m_ParameterReturn.CreateInstance(__uuidof(Parameter));
m_ParameterReturn-> Name = "@return ";
m_ParameterReturn-> Type = adInteger;
m_ParameterReturn-> Size = 4;
m_ParameterReturn-> Direction = adParamReturnValue;
m_ParameterReturn-> Value = (_variant_t)1;
m_Record.CreateInstance(__uuidof(Recordset));
return TRUE;
}
/*=========================================================================================*/
// 函数名称:GetConn
// 简要描述:根据数据库名取数据库连接
//
// 参数描述
// @参数类型 CString @参数名 sDBName @参数描述 数据库名
//
// 返回值:
// @类型: PDB_CONN
// 数据库连接对应的结构体
/*=========================================================================================*/
PDB_CONN CDBExec::GetConn(CString sDBName)
{
std::vector <PDB_CONN> ::iterator iter = m_vtDBConn.begin();