ADO를 이용한 삽입, 삭제, 업뎃
void CTestADODlg::OnButton3()
{
// DAO (Access2000) 이후 버젼 리딩가능
AfxGetModuleState()->m_dwVersion = 0x0601;
// COM이나 OLE를 라이브러리를 초기화한다.
AfxOleInit();
// ADO에 Connection 객체 사용
_ConnectionPtr pConn;
HRESULT hr;
BOOL IsConnectionOpen = FALSE;
// DB를 열기 위한 예의상 구문으로 인식하고 넘어가자.
CoInitialize(NULL);
hr = pConn.CreateInstance(__uuidof(Connection));
//pConn->CursorLocation =adUseClient;
// 데이터베이스 접속
if(SUCCEEDED(hr))
{
// Provider: 여기서는 mdb를 사용하므로, Microsoft.Jet.OLEDB.4.0를 선택한다.
// Data위치: c:\\TestDb.mdb
_bstr_t strMode("Provider=Microsoft.Jet.OLEDB.4.0;Data Source= d:\\dbTest.mdb;");
try
{
hr = pConn->Open(strMode,_bstr_t(L""),_bstr_t(L""), -1);
}
catch(_com_error& e)
{
AfxMessageBox(e.Description());
AfxMessageBox(e.ErrorMessage());
}
}
if(SUCCEEDED(hr))
{
AfxMessageBox("데이터베이스 연결됨");
IsConnectionOpen = TRUE;
}
// 데이터베이스에 연결이 되었다면,
if(IsConnectionOpen)
{
_RecordsetPtr pRs;
hr = pRs.CreateInstance(__uuidof(Recordset));
_bstr_t strQuery("Select * from tblTest");
// INSERT 구문
try
{
// 테이블명(tbltest)에서 필드ID에 200, Checker에 300을 삽입한다.
_bstr_t bstrQuery("INSERT INTO tbltest(ID,Checker) values('200','300')");
// 0L에서 0은 int형 0L은 long형을 의미한다.
// long형이 int 보다 더 큰수 저장가능
_variant_t valValue(0L);
// 새로운 트랜젝션을 시작한다.
pConn->BeginTrans();
pRs = pConn->Execute((_bstr_t)bstrQuery, &valValue, adOptionUnspecified);
// 현재 트랜젝션에서 일어난 변경을 저장하고 트랜젝션을 닫고
// 새로운 트랜젝션을 시작한다.
pConn->CommitTrans();
}
catch(_com_error& e)
{
AfxMessageBox(e.Description());
AfxMessageBox(e.ErrorMessage());
}
// UPDATE 구문
try
{
// 필드명 ID의 값이 2인 모든 곳의 필드명 ID, Checker의 필드값을 변경
_bstr_t bstrQuery2("UPDATE tbltest SET ID = 2000 , Checker = 300 WHERE ID = 2 ");
_variant_t valValue2(0L);
pConn->BeginTrans();
pConn->Execute((_bstr_t)bstrQuery2, &valValue2, adOptionUnspecified);
pConn->CommitTrans();
}
catch(_com_error& e)
{
AfxMessageBox(e.Description());
AfxMessageBox(e.ErrorMessage());
}
// DELETE 구문
try
{
// ID가 200인 tbltest 테이블 내의 Record를 삭제.
_bstr_t bstrQuery3("DELETE FROM tbltest WHERE ID = 200 ");
_variant_t valValue3(0L);
pConn->BeginTrans();
pConn->Execute((_bstr_t)bstrQuery3, &valValue3, adOptionUnspecified);
pConn->CommitTrans();
}
catch(_com_error& e)
{
AfxMessageBox(e.Description());
AfxMessageBox(e.ErrorMessage());
}
}
}