IsolationLevel 및 모드 속성 예제(VC++)
이 예제에서는 Mode 속성을 사용하여 단독 연결을 열고 IsolationLevel 속성을 사용하여 다른 트랜잭션을 격리하여 수행되는 트랜잭션을 엽니다.
본보기
// BeginIsolationLevelCpp.cpp
// compile with: /EHsc
#import "msado15.dll" no_namespace rename("EOF","EndOfFile")
#include <ole2.h>
#include <stdio.h>
#include <conio.h>
#include "icrsint.h"
// This class extracts titles and type from Title table
class CTitleRs : public CADORecordBinding {
BEGIN_ADO_BINDING(CTitleRs)
// Column title is the 2nd field in the table
ADO_VARIABLE_LENGTH_ENTRY2(2, adVarChar, m_szau_Title, sizeof(m_szau_Title), lau_TitleStatus, FALSE)
// Column type is the 3rd field in the table
ADO_VARIABLE_LENGTH_ENTRY2(3, adVarChar, m_szau_Type, sizeof(m_szau_Type), lau_TypeStatus, TRUE)
END_ADO_BINDING()
public:
CHAR m_szau_Title[81];
ULONG lau_TitleStatus;
CHAR m_szau_Type[13];
ULONG lau_TypeStatus;
};
// Function Declarations
inline void TESTHR(HRESULT x) { if FAILED(x) _com_issue_error(x); };
void IsolationLevelX();
void PrintProviderError(_ConnectionPtr pConnection);
void PrintComError(_com_error &e);
int main() {
if (FAILED(::CoInitialize(NULL)))
return -1;
IsolationLevelX();
::CoUninitialize();
}
void IsolationLevelX() {
// Define ADO ObjectPointers. Initialize Pointers on define. These are in the ADODB :: namespace.
_RecordsetPtr pRstTitles = NULL;
_ConnectionPtr pConnection = NULL;
// Define other Variables
HRESULT hr = S_OK;
IADORecordBinding *picRs = NULL; // Interface Pointer Declared
CTitleRs titlers; // C++ Class Object
LPSTR p_TempStr = NULL;
char * token1;
// Assign Connection String to Variable
_bstr_t strCnn("Provider='sqloledb'; Data Source='My_Data_Source'; Initial Catalog='pubs'; Integrated Security='SSPI';");
try {
// Open Connection and Titles Table
TESTHR(pConnection.CreateInstance(__uuidof(Connection)));
pConnection->Mode = adModeShareExclusive;
pConnection->IsolationLevel = adXactIsolated;
pConnection->Open(strCnn,"", "", adConnectUnspecified);
TESTHR(pRstTitles.CreateInstance(__uuidof(Recordset)));
pRstTitles->CursorType = adOpenDynamic;
pRstTitles->LockType = adLockPessimistic;
pRstTitles->Open("titles", _variant_t((IDispatch*) pConnection, true),
adOpenDynamic, adLockPessimistic, adCmdTable);
pConnection->BeginTrans();
// Display Connection Mode
if (pConnection->Mode == adModeShareExclusive)
printf("Connection Mode Is Exclusive");
else
printf("Connection Mode Is Not Exclusive");
// Display Isolation Level
if (pConnection->IsolationLevel == adXactIsolated)
printf("\nTransaction is Isolated\n");
else
printf("\nTransaction is not Isolated\n");
// Open an IADORecordBinding interface pointer which we will use for binding Recordset to a class.
TESTHR(pRstTitles->QueryInterface( __uuidof(IADORecordBinding), (LPVOID*)&picRs));
// Bind the Recordset to a C++ class here
TESTHR(picRs->BindToRecordset(&titlers));
// Change the type of psychology titles.
p_TempStr = (LPSTR) malloc(sizeof(titlers.m_szau_Type));
while (!(pRstTitles->EndOfFile)) {
// Set the final character of the destination string to NULL.
p_TempStr[sizeof(titlers.m_szau_Type) - 1] = '\0';
// The source string will get truncated if its length is
// longer than the length of the destination string minus one.
strncpy_s(p_TempStr, sizeof(titlers.m_szau_Type), strtok_s(titlers.m_szau_Type, " ", &token1), sizeof(titlers.m_szau_Type) - 1);
// Compare type with psychology
if (!strcmp(p_TempStr,"psychology")) {
// Set the final character of the destination string to NULL.
titlers.m_szau_Type[sizeof(titlers.m_szau_Type) - 1] = '\0';
// Copy "self_help" title field. The source string will get truncated if its length is
// longer than the length of the destination string minus one.
strncpy_s(titlers.m_szau_Type, sizeof(titlers.m_szau_Type), "self_help", sizeof(titlers.m_szau_Type) - 1);
picRs->Update(&titlers);
}
pRstTitles->MoveNext();
}
// Print current data in recordset.
pRstTitles->Requery(adOptionUnspecified);
// Open again IADORecordBinding interface pointer for Binding
// Recordset to a class.
TESTHR(pRstTitles->QueryInterface(__uuidof(IADORecordBinding), (LPVOID*)&picRs));
// ReBinding the Recordset to a C++ Class
TESTHR(picRs->BindToRecordset(&titlers));
// Move to the first record of the title table
pRstTitles->MoveFirst();
// Clear the screen for the next display
// system("cls");
while (!pRstTitles->EndOfFile) {
printf("%s - %s\n",titlers.lau_TitleStatus == adFldOK ?
titlers.m_szau_Title :"<NULL>",
titlers.lau_TypeStatus == adFldOK ?
titlers.m_szau_Type :"<NULL>");
pRstTitles->MoveNext();
}
}
catch(_com_error &e) {
// Notify the user of errors if any.
PrintProviderError(pConnection);
PrintComError(e);
}
// Clean up objects before exit. Release the IADORecordset Interface here.
if (picRs)
picRs->Release();
if (pRstTitles)
if (pRstTitles->State == adStateOpen)
pRstTitles->Close();
if (pConnection)
if (pConnection->State == adStateOpen) {
// Restore Original Data
pConnection->RollbackTrans();
pConnection->Close();
}
// Deallocate the memory
if (p_TempStr)
free(p_TempStr);
}
void PrintProviderError(_ConnectionPtr pConnection) {
// Print Provider Errors from Connection object
// pErr is a record object in the Connection's Error collection
ErrorPtr pErr = NULL;
if ((pConnection->Errors->Count)>0) {
long nCount = pConnection->Errors->Count;
// Collection ranges from 0 to nCount-1
for (long i = 0 ; i < nCount ; i++) {
pErr = pConnection->Errors->GetItem(i);
printf("\t Error Number :%x \t %s",pErr->Number, (LPCSTR) pErr->Description);
}
}
}
void PrintComError(_com_error &e) {
_bstr_t bstrSource(e.Source());
_bstr_t bstrDescription(e.Description());
// Print Com errors.
printf("Error\n");
printf("\tCode = %08lx\n", e.Error());
printf("\tCode meaning = %s\n", e.ErrorMessage());
printf("\tSource = %s\n", (LPCSTR) bstrSource);
printf("\tDescription = %s\n", (LPCSTR) bstrDescription);
}
연결 모드는 배타적
트랜잭션이 격리된
바쁜 경영진의 데이터베이스 가이드 - 비즈니스
컴퓨터로 요리하는 : 은밀한 대차대조표 - 비즈니스
당신은 컴퓨터 스트레스를 방지 할 수 있습니다! -사업
컴퓨터에 대한 바로 이야기 - 비즈니스
실리콘 밸리 미식 취급 - mod_cook
미식가 전자레인지 - mod_cook
컴퓨터 요리의 심리학 - 미정
하지만 사용자에게 친숙한가요? - popular_comp
실리콘 밸리의 비밀 - popular_comp
Net Etiquette - popular_comp
컴퓨터 공포증 및 비 공포증 개인: 행동 변화 - self_help
분노가 적인가? - self_help
두려움없는 생활 - self_help
장기간 데이터 박탈: 4건의 사례 연구 - self_help
정서적 보안: 새로운 알고리즘 - self_help
양파, 부추, 마늘: 지중해의 요리 비밀 - trad_cook
버킹엄 궁전 부엌에서 50 년 - trad_cook
초밥, 누구? - trad_cook