4,018
社区成员




//OnInitDialog中的连接代码
CString strSQL;
HRESULT hr;
try
{
hr=m_pConnection.CreateInstance(__uuidof(Connection));
strSQL="Provider=SQLOLEDB;Persist Security Info=False;Integrated Security=SSPI;Initial Catalog=MyTest;Data Source=YOS-0222140854";
if(SUCCEEDED(hr))
{
hr=m_pConnection->Open(_bstr_t(strSQL),"","",adModeUnknown);
}
}
catch(_com_error e) //捕捉异常
{
CString errormessage;
errormessage.Format(_T("连接数据库失败!\r\n错误信息:%s",e.ErrorMessage()));
AfxMessageBox(errormessage);//显示错误信息
return;
}
AfxMessageBox("连接成功");
UINT CTestThreadDlg::Thread1(LPVOID lpParam)
{
CTestThreadDlg *pCurDlg = (CTestThreadDlg *)lpParam;
while (WaitForSingleObject(pCurDlg->m_hEvent,0)!=WAIT_OBJECT_0)
{
try
{
CString strSql = "insert into Table_1 values('000000000',1)";
COleVariant vtOptional((long)DISP_E_PARAMNOTFOUND,VT_ERROR);
_ConnectionPtr pConnection = pCurDlg->m_pConnection;
pConnection->Execute(_bstr_t(strSql),vtOptional,-1);
pCurDlg->m_iCount1++;
OutputDebugString("线程一操作成功\n");
}
catch(_com_error* e)
{
CString errormessage;
errormessage.Format("***********************线程一数据库使用失败:%s\n", e->ErrorMessage());
OutputDebugString(errormessage);
}
}
return 0;
}
UINT CTestThreadDlg::Thread2(LPVOID lpParam)
{
CTestThreadDlg *pCurDlg = (CTestThreadDlg *)lpParam;
while (WaitForSingleObject(pCurDlg->m_hEvent,0)!=WAIT_OBJECT_0)
{
try
{
CString strSql = "insert into Table_1 values('1111111111',2)";
COleVariant vtOptional((long)DISP_E_PARAMNOTFOUND,VT_ERROR);
_ConnectionPtr pConnection = pCurDlg->m_pConnection;
pConnection->Execute(_bstr_t(strSql),vtOptional,-1);
pCurDlg->m_iCount2++;
OutputDebugString("线程二操作成功\n");
}
catch (_com_error* e)
{
CString errormessage;
errormessage.Format("***********************线程二数据库使用失败:%s\n", e->ErrorMessage());
OutputDebugString(errormessage);
}
}
return 0;
}
UINT CTestThreadDlg::Thread3(LPVOID lpParam)
{
CTestThreadDlg *pCurDlg = (CTestThreadDlg *)lpParam;
while (WaitForSingleObject(pCurDlg->m_hEvent,0)!=WAIT_OBJECT_0)
{
try
{
CString strSql = "insert into Table_1 values('2222222222',3)";
COleVariant vtOptional((long)DISP_E_PARAMNOTFOUND,VT_ERROR);
_ConnectionPtr pConnection = pCurDlg->m_pConnection;
pConnection->Execute(_bstr_t(strSql),vtOptional,-1);
pCurDlg->m_iCount3++;
OutputDebugString("线程三操作成功\n");
}
catch (_com_error* e)
{
CString errormessage;
errormessage.Format("***********************线程三数据库使用失败:%s\n", e->ErrorMessage());
OutputDebugString(errormessage);
}
}
return 0;
}
UINT CTestThreadDlg::Thread4(LPVOID lpParam)
{
CTestThreadDlg *pCurDlg = (CTestThreadDlg *)lpParam;
while (WaitForSingleObject(pCurDlg->m_hEvent,0)!=WAIT_OBJECT_0)
{
try
{
_CommandPtr pCommandPtr;
pCommandPtr.CreateInstance("ADODB.Command");
_ConnectionPtr pConnectionPtr = pCurDlg->m_pConnection;
pCommandPtr->ActiveConnection = pConnectionPtr;
pCommandPtr->CommandText = "select * from Table_1";
_RecordsetPtr pRecordsetPtr = pCommandPtr->Execute(NULL,NULL,adCmdText);
_variant_t vName = pRecordsetPtr->GetCollect((_variant_t)(long)0);//取得第一个字段
CString sName = (LPCTSTR)_bstr_t(vName);
pCommandPtr.Release();
CString sText;
sText.Format("查询结果:%s",sName);
OutputDebugString(sText);
OutputDebugString("\n");
pCurDlg->m_iCount4++;
OutputDebugString("线程四操作成功\n");
}
catch (_com_error* e)
{
CString errormessage;
errormessage.Format("***********************线程四数据库使用失败:%s\n", e->ErrorMessage());
OutputDebugString(errormessage);
}
}
return 0;
}
UINT CTestThreadDlg::Thread5(LPVOID lpParam)
{
CTestThreadDlg *pCurDlg = (CTestThreadDlg *)lpParam;
while (WaitForSingleObject(pCurDlg->m_hEvent,0)!=WAIT_OBJECT_0)
{
try
{
CString strSql = "update Table_1 set age=100 where name='0000000000'";
COleVariant vtOptional((long)DISP_E_PARAMNOTFOUND,VT_ERROR);
_ConnectionPtr pConnection = pCurDlg->m_pConnection;
pConnection->Execute(_bstr_t(strSql),vtOptional,-1);
pCurDlg->m_iCount5++;
OutputDebugString("线程五操作成功\n");
}
catch (_com_error* e)
{
CString errormessage;
errormessage.Format("***********************线程五数据库使用失败:%s\n", e->ErrorMessage());
OutputDebugString(errormessage);
}
}
return 0;
}
void CTestThreadDlg::OnButton1()
{
// TODO: Add your control notification handler code here
OnButton1();
ResetEvent(m_hEvent);
m_iCount1=m_iCount2=m_iCount3=m_iCount4=m_iCount5=0;
AfxBeginThread((AFX_THREADPROC)Thread1, reinterpret_cast<LPVOID>(this));
AfxBeginThread((AFX_THREADPROC)Thread2, reinterpret_cast<LPVOID>(this));
AfxBeginThread((AFX_THREADPROC)Thread3, reinterpret_cast<LPVOID>(this));
AfxBeginThread((AFX_THREADPROC)Thread4, reinterpret_cast<LPVOID>(this));
AfxBeginThread((AFX_THREADPROC)Thread5, reinterpret_cast<LPVOID>(this));
}
void CTestThreadDlg::OnButton3()
{
// TODO: Add your control notification handler code here
SetEvent(m_hEvent);
CString sText;
sText.Format("线程一插入%d\r\n线程二插入%d\r\n线程三插入%d\r\n线程四查询%d\r\n线程五更新%d",m_iCount1,m_iCount2,m_iCount3,m_iCount4,m_iCount5);
AfxMessageBox(sText);
m_pConnection->Release();
m_pConnection.Release();
}