miniado用法 数据库连接
2015-12-18 22:12 佛皮 阅读(164) 评论(0) 收藏 举报
使用ado连接各种不同的数据库
//----------------------------.h ---------------------------------- #pragma once #include "math.h" #import "MSADO15.DLL" rename_namespace("ADOWE") rename("EOF","EndOfFile") using namespace ADOWE; struct CADOFieldInfo//AFX_EXT_CLASS { char m_strName[30]; //字段名 short m_nType; //类型 long m_lSize; //长度大小 long m_lDefinedSize; long m_lAttributes; short m_nOrdinalPosition; BOOL m_bRequired; BOOL m_bAllowZeroLength; long m_lCollatingOrder; }; class CDBAdo { public: _CommandPtr m_ptrCommand; //命令对象 ,是要提交的sql查询字符串 _ConnectionPtr m_ptrConnection; //数据库对象 _RecordsetPtr m_ptrRecordset; //记录集对象 CString m_strConnect, //连接字符串 m_strErrorMsg; //错误信息 int m_nAdoType; //数据库类型0:mdb, 1:其他 public: CDBAdo(void); ~CDBAdo(void); void DetectResult(HRESULT hResult); void RecordErrorMsg(_com_error comError); CString GetLastError(){return m_strErrorMsg;} bool CreateInstance(); // ADO连接测试,返回连接指针 _ConnectionPtr ADOLink(CString strDatabaseType,CString strServer,CString strPortNo,CString strDatabaseName,CString strUser,CString strPWD); bool SetConnectionString(CString strDriver, CString strIP, WORD wPort, CString strCatalog, CString strUserID, CString strPassword); bool SetConnectionString(CString strDriver, CString strDataSrc, CString strPassword); bool OpenConnection(); bool CloseConnection(); bool IsConnecting(); void ClearAllParameters(); void AddParamter(LPCTSTR lpcsrName, ADOWE::ParameterDirectionEnum Direction, ADOWE::DataTypeEnum Type, long lSize, _variant_t & vtValue); void SetSPName(LPCTSTR lpcsrSPName); bool ExecuteCommand(bool bIsRecordset); bool Execute(LPCTSTR lpcsrCommand); long GetReturnValue(); bool OpenRecordset(char* szSQL); bool CloseRecordset(); bool IsRecordsetOpened(); bool IsEndRecordset(); void MoveToNext(); void MoveToFirst(); void MoveToLast(); long RollbackTrans(); long GetRecordCount(); int GetFieldCount(); BOOL GetFieldInfo(int nIndex,CADOFieldInfo &fldInfo); BOOL GetFieldInfo(LPCTSTR lpFieldName, CADOFieldInfo& fldInfo); WORD GetFieldValueWord(LPCTSTR lpcsrFieldName); CString GetFieldValueStr(LPCTSTR lpcsrFieldName); int GetFieldValueInt(LPCTSTR lpcsrFieldName); BYTE GetFieldValueByte(LPCTSTR lpcsrFieldName); long GetFieldValueLong(LPCTSTR lpcsrFieldName); DWORD GetFieldValueDword(LPCTSTR lpcsrFieldName); UINT GetFieldValueUint(LPCTSTR lpcsrFieldName); double GetFieldValueDbl(LPCTSTR lpcsrFieldName); __int64 GetFieldValueInt64(LPCTSTR lpcsrFieldName); bool GetFieldValueBool(LPCTSTR lpcsrFieldName); COleDateTime GetFieldValueTime(LPCTSTR lpcsrFieldName); /*bool GetFieldValue(LPCTSTR lpcsrFieldName, WORD& wValue); bool GetFieldValue(LPCTSTR lpcsrFieldName, CString& strValue); bool GetFieldValue(LPCTSTR lpcsrFieldName, INT& nValue); bool GetFieldValue(LPCTSTR lpcsrFieldName, BYTE& bValue); bool GetFieldValue(LPCTSTR lpcsrFieldName, LONG& lValue); bool GetFieldValue(LPCTSTR lpcsrFieldName, DWORD& dwValue); bool GetFieldValue(LPCTSTR lpcsrFieldName, UINT& ulValue); bool GetFieldValue(LPCTSTR lpcsrFieldName, DOUBLE& dbValue); bool GetFieldValue(LPCTSTR lpcsrFieldName, __int64& llValue); bool GetFieldValue(LPCTSTR lpcsrFieldName, COleDateTime& Time); bool GetFieldValue(LPCTSTR lpcsrFieldName, bool& bValue); */ }; //---------------------------- .cpp ---------------------------------------- #include "StdAfx.h" #include "DBAdo.h" #include "string.h" CDBAdo::CDBAdo(void) { m_strConnect = _T(""); m_strErrorMsg = _T(""); m_nAdoType = 0; //初始化 COM CoInitialize(NULL); } CDBAdo::~CDBAdo(void) { //关闭连接 CloseConnection(); //释放对象 if(m_ptrCommand!=NULL) m_ptrCommand.Release(); if(m_ptrRecordset!=NULL) m_ptrRecordset.Release(); if(m_ptrConnection!=NULL) m_ptrConnection.Release(); } bool CDBAdo::CreateInstance() { //创建对象 m_ptrCommand.CreateInstance(__uuidof(Command)); m_ptrRecordset.CreateInstance(__uuidof(Recordset)); m_ptrConnection.CreateInstance(__uuidof(Connection)); if(m_ptrCommand==NULL) { m_strErrorMsg = _T("数据库命令对象创建失败"); return false; } if(m_ptrRecordset==NULL) { m_strErrorMsg = _T("数据库记录集对象创建失败"); return false; } if(m_ptrConnection==NULL) { m_strErrorMsg = _T("数据库连接对象创建失败"); return false; } //设置变量 m_ptrCommand->CommandType = adCmdStoredProc; return true; } void CDBAdo::DetectResult(HRESULT hResult) { if(FAILED(hResult)) _com_issue_error(hResult); } void CDBAdo::RecordErrorMsg(_com_error comError) { _bstr_t bstrDescribe(comError.Description()); m_strErrorMsg.Format(TEXT("ADO 错误:0x%8x,%s"), comError.Error(), (LPCTSTR)bstrDescribe); AfxMessageBox(m_strErrorMsg); } _ConnectionPtr CDBAdo::ADOLink(CString strDatabaseType,CString strServer,CString strPortNo,CString strDatabaseName,CString strUser,CString strPWD)// ADO连接测试,返回连接指针 { strDatabaseType.MakeUpper(); if ( !(strDatabaseType==_T("SQLSERVER") || strDatabaseType==_T("DB2") || strDatabaseType==_T("ORACLE") || strDatabaseType==_T("ACCESS")) ) { ASSERT(FALSE); return FALSE; } HRESULT hr = S_FALSE; VARIANT_BOOL bOK = VARIANT_FALSE; _ConnectionPtr pConnADO = NULL; hr = pConnADO.CreateInstance(__uuidof(Connection)); ASSERT(SUCCEEDED(hr) && pConnADO!=NULL); CString strConnect(_T("")); m_nAdoType = 1; if (0 == strDatabaseType.Find(_T("SQLSERVER"))) { //strConnect = _T("Provider=sqloledb;Data Source=MyServerName;Initial Catalog=MyDatabaseName;User Id=MyUsername;Password=MyPassword;"); strConnect.Format(_T("Provider=sqloledb;Data Source=%s;Initial Catalog=%s;User Id=%s;Password=%s;"),strServer,strDatabaseName,strUser,strPWD); } else if (0 == strDatabaseType.Find(_T("DB2"))) { //"Provider=IBMDADB2; Database=sample; HOSTNAME=db2host; PROTOCOL=TCPIP; PORT=50000; uid=myUserName; pwd=myPwd;" strConnect.Format(_T("Provider=IBMDADB2; Database=%s; HOSTNAME=%s; PROTOCOL=TCPIP; PORT=%s; uid=%s; pwd=%s;"),strDatabaseName,strServer,strPortNo,strUser,strPWD); } else if (0 == strDatabaseType.Find(_T("ORACLE"))) { //strConnect = _T("Provider=OraOLEDB.Oracle;Data Source=MyOracleDB;User Id=myUsername;Password=myPassword;"); strConnect.Format(_T("Provider=OraOLEDB.Oracle;Data Source=%s;User Id=%s;Password=%s;"),strDatabaseName,strUser,strPWD); } else if (0 == strDatabaseType.Find(_T("ACCESS"))) { m_nAdoType = 0; //strConnect = _T("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\\DatabasePath\\MmDatabase.mdb;User Id=admin;Password=;"); strConnect.Format(_T("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=%s;User Id=admin;Password=;"),strServer); } else { ASSERT(FALSE); return NULL; } try { hr = pConnADO->put_ConnectionString(CComBSTR(strConnect)); hr = pConnADO->raw_Open(CComBSTR(strConnect),CComBSTR(L""),CComBSTR(L""),adOpenUnspecified); if (hr != S_OK) { return NULL; } } catch (_com_error e) { CString errormessage; errormessage.Format("Warning:连接数据库时发生未知错误,错误信息:%s\n",e.ErrorMessage()); ::MessageBox(NULL,errormessage,_T("提示"),MB_OK|MB_ICONINFORMATION); return FALSE; return NULL; } return pConnADO; } /*参数1:数据库类型的搜索引擎 2:服务器地址 数据库所在电脑的IP 3:数据库单口号 4:数据库名 5:用户名 6:用户密码 该函数 可以连接远程和非远程的数据库 */ bool CDBAdo::SetConnectionString(CString strDriver, CString strIP, WORD wPort, CString strCatalog, CString strUserID, CString strPassword) { CString strProvider, strPWD, strUID, strData, strDataSrc; //strProvider.Format(_T("Provider=%s;"), strProvider); strProvider.Format(_T("Provider=%s;"), strDriver); strPWD.Format(_T("Password=%s;"), strPassword); strUID.Format(_T("User ID=%s;"), strUserID); strData.Format(_T("Initial Catalog=%s;"), strCatalog); //strDataSrc.Format(_T("Data Source=%s,%ld;"), strIP, wPort); strDataSrc.Format(_T("Data Source=%s;"), strIP); //SQL SERVER连接 //构造连接字符串 // m_strConnect = strProvider+strPWD+_T("Persist Security Info=True;")+strUID+strData+strDataSrc; m_strConnect = strProvider+strDataSrc+strData+strUID+strPWD; m_nAdoType = 1; return true; } //默认的ACESS 的连接方法 bool CDBAdo::SetConnectionString(CString strDriver, CString strDataSrc, CString strPassword) { CString strProvider, strDataSource, strPWD; strProvider.Format(_T("Provider=%s;"), strDriver); strDataSource.Format(_T("Data Source=%s;"), strDataSrc); strPWD.Format(_T("Jet OLEDB:DataBase Password=%s;"), strPassword); //构造连接字符串 m_strConnect = strProvider+_T("User ID=Admin;")+strDataSource+strPWD; m_nAdoType = 0; return true; } bool CDBAdo::OpenConnection() { try { //关闭连接 CloseConnection(); //连接数据库 DetectResult(m_ptrConnection->Open(_bstr_t(m_strConnect), "", "", adModeUnknown)); m_ptrConnection->CursorLocation = adUseClient; m_ptrCommand->ActiveConnection = m_ptrConnection; return true; } catch(_com_error& comError) { RecordErrorMsg(comError); } return false; } bool CDBAdo::CloseConnection() { try { CloseRecordset(); if((m_ptrConnection!=NULL)&&(m_ptrConnection->GetState()!=adStateClosed)) DetectResult(m_ptrConnection->Close()); return true; } catch(_com_error& comError) { RecordErrorMsg(comError); } return false; } //判断是否连接上 bool CDBAdo::IsConnecting() { try { //状态判断 if(m_ptrConnection==NULL) return false; if(m_ptrConnection->GetState()==adStateClosed) return false; //参数判断 long lErrorCount = m_ptrConnection->Errors->Count; if(lErrorCount>0L) { ErrorPtr pError = NULL; for(long i=0; i<lErrorCount; i++) { pError = m_ptrConnection->Errors->GetItem(i); if(pError->Number==0x80004005) return false; } } return true; } catch(_com_error& comError) { RecordErrorMsg(comError); } return false; } //打开记录集 bool CDBAdo::OpenRecordset(char* szSQL) { try { //关闭记录集 CloseRecordset(); m_ptrRecordset->Open(szSQL, m_ptrConnection.GetInterfacePtr(), adOpenDynamic, adLockOptimistic, adCmdText); return true; } catch(_com_error& comError) { RecordErrorMsg(comError); } return false; } //关闭记录集 bool CDBAdo::CloseRecordset() { try { if(IsRecordsetOpened()) DetectResult(m_ptrRecordset->Close()); return true; } catch(_com_error& comError) { RecordErrorMsg(comError); } return false; } //判断记录集是否打开 bool CDBAdo::IsRecordsetOpened() { if(m_ptrRecordset==NULL) return false; if(m_ptrRecordset->GetState()==adStateClosed) return false; return true; } //判断记录集为最后一条记录 bool CDBAdo::IsEndRecordset() { try { return (m_ptrRecordset->EndOfFile==VARIANT_TRUE); } catch(_com_error& comError) { RecordErrorMsg(comError); } return true; } //移动到下一条记录 void CDBAdo::MoveToNext() { try { m_ptrRecordset->MoveNext(); } catch(_com_error& comError) { RecordErrorMsg(comError); } } //移动到第一条记录 void CDBAdo::MoveToFirst() { try { m_ptrRecordset->MoveFirst(); } catch(_com_error& comError) { RecordErrorMsg(comError); } } //移动到最后记录 void CDBAdo::MoveToLast() { try { m_ptrRecordset->MoveLast(); } catch(_com_error& comError) { RecordErrorMsg(comError); } } //回滚到上条记录 long CDBAdo::RollbackTrans() { return m_ptrConnection->RollbackTrans ( ); } //获取记录集的总数 long CDBAdo::GetRecordCount() { try { if(m_ptrRecordset==NULL) return 0; return m_ptrRecordset->GetRecordCount(); } catch(_com_error& comError) { RecordErrorMsg(comError); } return 0; } //清空所有当前记录集数据 void CDBAdo::ClearAllParameters() { try { long lParamCount = m_ptrCommand->Parameters->Count; if(lParamCount>0L) { for(long i=lParamCount; i>0; i--) { _variant_t vtIndex; vtIndex.intVal = i-1; m_ptrCommand->Parameters->Delete(vtIndex); } } } catch(_com_error& comError) { RecordErrorMsg(comError); } } void CDBAdo::AddParamter(LPCTSTR lpcsrName, ADOWE::ParameterDirectionEnum Direction, ADOWE::DataTypeEnum Type, long lSize, _variant_t & vtValue) { ASSERT(lpcsrName!=NULL); try { _ParameterPtr Parameter = m_ptrCommand->CreateParameter(lpcsrName, Type, Direction, lSize, vtValue); m_ptrCommand->Parameters->Append(Parameter); } catch(_com_error& comError) { RecordErrorMsg(comError); } } void CDBAdo::SetSPName(LPCTSTR lpcsrSPName) { try { m_ptrCommand->CommandText = lpcsrSPName; } catch(_com_error& comError) { RecordErrorMsg(comError); } } // bool CDBAdo::ExecuteCommand(bool bIsRecordset) { try { //关闭记录集 CloseRecordset(); //执行命令 if(bIsRecordset) { m_ptrRecordset->PutRefSource(m_ptrCommand); m_ptrRecordset->CursorLocation = adUseClient; DetectResult(m_ptrRecordset->Open((IDispatch*)m_ptrCommand, vtMissing, adOpenForwardOnly, adLockReadOnly, adOptionUnspecified)); }else { m_ptrConnection->CursorLocation = adUseClient; DetectResult(m_ptrCommand->Execute(NULL, NULL, adExecuteNoRecords)); } return true; } catch(_com_error& comError) { RecordErrorMsg(comError); } return false; } //执行SQL语句 bool CDBAdo::Execute(LPCTSTR lpcsrCommand) { try { m_ptrConnection->CursorLocation = adUseClient; m_ptrConnection->Execute(lpcsrCommand, NULL, adExecuteNoRecords); return true; } catch(_com_error& comError) { RecordErrorMsg(comError); } return false; } long CDBAdo::GetReturnValue() { try { _ParameterPtr ptrParam; long lParameterCount = m_ptrCommand->Parameters->Count; for(long i=0; i<lParameterCount; i++) { ptrParam = m_ptrCommand->Parameters->Item[i]; if(ptrParam->Direction==adParamReturnValue) return ptrParam->Value.lVal; } } catch(_com_error& comError) { RecordErrorMsg(comError); } return 0; } int CDBAdo::GetFieldCount() { return m_ptrRecordset->Fields->GetCount(); } //根据字段名称获取字段信息 BOOL CDBAdo::GetFieldInfo(LPCTSTR lpFieldName, CADOFieldInfo& fldInfo) { FieldPtr pField = m_ptrRecordset->Fields->GetItem(lpFieldName); memset(&fldInfo, 0, sizeof(CADOFieldInfo)); strcpy(fldInfo.m_strName, (LPCTSTR)pField->GetName()); fldInfo.m_lDefinedSize = pField->GetDefinedSize(); fldInfo.m_nType = pField->GetType(); fldInfo.m_lAttributes = pField->GetAttributes(); if(!IsEndRecordset()) fldInfo.m_lSize = pField->GetActualSize(); return TRUE; } //根据字段序号来获取字段信息 数据表默认的字段顺序 BOOL CDBAdo::GetFieldInfo(int nIndex,CADOFieldInfo &fldInfo) { _variant_t vtIndex; vtIndex.vt = VT_I2; vtIndex.iVal = nIndex; FieldPtr pField = m_ptrRecordset->Fields->GetItem(vtIndex); memset(&fldInfo, 0, sizeof(CADOFieldInfo)); strcpy(fldInfo.m_strName, (LPCTSTR)pField->GetName()); fldInfo.m_lDefinedSize = pField->GetDefinedSize(); fldInfo.m_nType = pField->GetType(); fldInfo.m_lAttributes = pField->GetAttributes(); if(!IsEndRecordset()) fldInfo.m_lSize = pField->GetActualSize(); return TRUE; } //获取字段值 WORD CDBAdo::GetFieldValueWord(LPCTSTR lpcsrFieldName) { WORD wValue = 0L; try { _variant_t vtFld = m_ptrRecordset->Fields->GetItem(lpcsrFieldName)->Value; if((vtFld.vt!=VT_NULL)&&(vtFld.vt!=VT_EMPTY)) wValue = (WORD)vtFld.ulVal; return wValue; } catch(_com_error& comError) { RecordErrorMsg(comError); } return wValue; } CString CDBAdo::GetFieldValueStr(LPCTSTR lpcsrFieldName) { CString strValue=_T(""); try { _variant_t vtFld = m_ptrRecordset->Fields->GetItem(lpcsrFieldName)->Value; if(vtFld.vt==VT_BSTR) { strValue = (char*)_bstr_t(vtFld); strValue.TrimLeft(); } return strValue; } catch(_com_error& comError) { RecordErrorMsg(comError); } return strValue; } int CDBAdo::GetFieldValueInt(LPCTSTR lpcsrFieldName) { int nValue = 0; try { _variant_t vtFld = m_ptrRecordset->Fields->GetItem(lpcsrFieldName)->Value; switch(vtFld.vt) { case VT_BOOL: { nValue = vtFld.boolVal; break; } case VT_I2: case VT_UI1: { nValue = vtFld.iVal; break; } case VT_NULL: case VT_EMPTY: { nValue = 0; break; } default: nValue = vtFld.iVal; } return nValue; } catch(_com_error& comError) { RecordErrorMsg(comError); } return nValue; } //无符号的char型 BYTE CDBAdo::GetFieldValueByte(LPCTSTR lpcsrFieldName) { BYTE bValue = 0; try { _variant_t vtFld = m_ptrRecordset->Fields->GetItem(lpcsrFieldName)->Value; switch(vtFld.vt) { case VT_BOOL: { bValue = (vtFld.boolVal!=0)?1:0; break; } case VT_I2: case VT_UI1: { bValue = (vtFld.iVal>0)?1:0; break; } case VT_NULL: case VT_EMPTY: { bValue = 0; break; } default: bValue = (BYTE)vtFld.iVal; } return bValue; } catch(_com_error& comError) { RecordErrorMsg(comError); } return bValue; } //无符号整形 UINT CDBAdo::GetFieldValueUint(LPCTSTR lpcsrFieldName) { UINT ulValue = 0L; try { _variant_t vtFld = m_ptrRecordset->Fields->GetItem(lpcsrFieldName)->Value; if((vtFld.vt!=VT_NULL)&&(vtFld.vt!=VT_EMPTY)) ulValue = vtFld.lVal; return ulValue; } catch(_com_error& comError) { RecordErrorMsg(comError); } return ulValue; } double CDBAdo::GetFieldValueDbl(LPCTSTR lpcsrFieldName) { double dbValue=0.0000000000000000; try { _variant_t vtFld = m_ptrRecordset->Fields->GetItem(lpcsrFieldName)->Value; switch(vtFld.vt) { case VT_R4:dbValue = vtFld.fltVal;break; case VT_R8:dbValue = vtFld.dblVal;break; case VT_DECIMAL: { dbValue = vtFld.decVal.Lo32; dbValue *= (vtFld.decVal.sign==128)?-1:1; dbValue /= pow((float)10,vtFld.decVal.scale); } break; case VT_UI1:dbValue = vtFld.iVal;break; case VT_I2: case VT_I4:dbValue = vtFld.lVal;break; case VT_NULL: case VT_EMPTY:dbValue = 0.0L;break; default:dbValue = vtFld.dblVal; } return dbValue; } catch(_com_error& comError) { RecordErrorMsg(comError); } return dbValue; } long CDBAdo::GetFieldValueLong(LPCTSTR lpcsrFieldName) { long lValue = 0L; try { _variant_t vtFld = m_ptrRecordset->Fields->GetItem(lpcsrFieldName)->Value; if((vtFld.vt!=VT_NULL)&&(vtFld.vt!=VT_EMPTY)) lValue = vtFld.lVal; return lValue; } catch(_com_error& comError) { RecordErrorMsg(comError); } return lValue; } //无符号长整形 DWORD CDBAdo::GetFieldValueDword(LPCTSTR lpcsrFieldName) { DWORD dwValue = 0L; try { _variant_t vtFld = m_ptrRecordset->Fields->GetItem(lpcsrFieldName)->Value; if((vtFld.vt!=VT_NULL)&&(vtFld.vt!=VT_EMPTY)) dwValue = vtFld.ulVal; return dwValue; } catch(_com_error& comError) { RecordErrorMsg(comError); } return dwValue; } __int64 CDBAdo::GetFieldValueInt64(LPCTSTR lpcsrFieldName) { __int64 llValue = 0L; try { _variant_t vtFld = m_ptrRecordset->Fields->GetItem(lpcsrFieldName)->Value; if((vtFld.vt!=VT_NULL)&&(vtFld.vt!=VT_EMPTY)) llValue=vtFld.lVal; return llValue; } catch(_com_error& comError) { RecordErrorMsg(comError); } return llValue; } COleDateTime CDBAdo::GetFieldValueTime(LPCTSTR lpcsrFieldName) { COleDateTime Time; Time.SetStatus(COleDateTime::null); try { _variant_t vtFld = m_ptrRecordset->Fields->GetItem(lpcsrFieldName)->Value; switch(vtFld.vt) { case VT_DATE: { COleDateTime TempTime(vtFld); Time = TempTime; }break; case VT_EMPTY: case VT_NULL:Time.SetStatus(COleDateTime::null);break; default: return Time; } return Time; } catch(_com_error& comError) { RecordErrorMsg(comError); } return Time; } bool CDBAdo::GetFieldValueBool(LPCTSTR lpcsrFieldName) { bool bValue=false; try { _variant_t vtFld = m_ptrRecordset->Fields->GetItem(lpcsrFieldName)->Value; switch(vtFld.vt) { case VT_BOOL:bValue=(vtFld.boolVal==0)?false:true;break; case VT_EMPTY: case VT_NULL:bValue = false;break; default:return bValue; } return bValue; } catch(_com_error& comError) { RecordErrorMsg(comError); } return bValue; }
_ConnectionPtr CDBAdo::ADOLink(CString strDatabaseType,CString strServer,CString strPortNo,CString strDatabaseName,CString strUser,CString strPWD)// ADO连接测试,返回连接指针
{
strDatabaseType.MakeUpper();
if ( !(strDatabaseType==_T("SQLSERVER") || strDatabaseType==_T("DB2") || strDatabaseType==_T("ORACLE") || strDatabaseType==_T("ACCESS")) )
{
ASSERT(FALSE);
return FALSE;
}
HRESULT hr = S_FALSE;
VARIANT_BOOL bOK = VARIANT_FALSE;
_ConnectionPtr pConnADO = NULL;
hr = pConnADO.CreateInstance(__uuidof(Connection));
ASSERT(SUCCEEDED(hr) && pConnADO!=NULL);
CString strConnect(_T(""));
m_nAdoType = 1;
if (0 == strDatabaseType.Find(_T("SQLSERVER")))
{
//strConnect = _T("Provider=sqloledb;Data Source=MyServerName;Initial Catalog=MyDatabaseName;User Id=MyUsername;Password=MyPassword;");
strConnect.Format(_T("Provider=sqloledb;Data Source=%s;Initial Catalog=%s;User Id=%s;Password=%s;"),strServer,strDatabaseName,strUser,strPWD);
}
else if (0 == strDatabaseType.Find(_T("DB2")))
{
//"Provider=IBMDADB2; Database=sample; HOSTNAME=db2host; PROTOCOL=TCPIP; PORT=50000; uid=myUserName; pwd=myPwd;"
strConnect.Format(_T("Provider=IBMDADB2; Database=%s; HOSTNAME=%s; PROTOCOL=TCPIP; PORT=%s; uid=%s; pwd=%s;"),strDatabaseName,strServer,strPortNo,strUser,strPWD);
}
else if (0 == strDatabaseType.Find(_T("ORACLE")))
{
//strConnect = _T("Provider=OraOLEDB.Oracle;Data Source=MyOracleDB;User Id=myUsername;Password=myPassword;");
strConnect.Format(_T("Provider=OraOLEDB.Oracle;Data Source=%s;User Id=%s;Password=%s;"),strDatabaseName,strUser,strPWD);
}
else if (0 == strDatabaseType.Find(_T("ACCESS")))
{
m_nAdoType = 0;
//strConnect = _T("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\\DatabasePath\\MmDatabase.mdb;User Id=admin;Password=;");
strConnect.Format(_T("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=%s;User Id=admin;Password=;"),strServer);
}
else
{
ASSERT(FALSE);
return NULL;
}
try
{
hr = pConnADO->put_ConnectionString(CComBSTR(strConnect));
hr = pConnADO->raw_Open(CComBSTR(strConnect),CComBSTR(L""),CComBSTR(L""),adOpenUnspecified);
if (hr != S_OK)
{
return NULL;
}
}
catch (_com_error e)
{
CString errormessage;
errormessage.Format("Warning:连接数据库时发生未知错误,错误信息:%s\n",e.ErrorMessage());
::MessageBox(NULL,errormessage,_T("提示"),MB_OK|MB_ICONINFORMATION);
return FALSE;
return NULL;
}
return pConnADO;
}
浙公网安备 33010602011771号