ADO API
ProudNet DB에 있는 ADO Wrapper API 는 Microsoft ActiveX Data Object (ADO)를 C++ 언어에서 쉽게 다룰 수 있도록 만들어진 API 로, 보다 쉽게 ADO를 이용한 DBMS 접근을 할 수 있습니다.
아래 코드는 git 예시 프로젝트를 바탕으로 설명되어 있습니다.
DB 연결하기
Open 함수에 파라미터로 들어가는 구문은 Connection Strings 규칙을 따릅니다.
Proud::CAdoConnection conn;
// MSSQL
conn.Open(L"Driver={ODBC Driver 17 for SQL Server};Server=localhost;Database=ProudAdo-Test;Trusted_Connection=yes;");
// MYSQL
conn.Open(L"Driver={MySQL ODBC 8.0 Unicode Driver};Server=127.0.0.1;Port=3306;Database=proudado-test;User ID=proud;Password=proudnet123;Option=3;", Proud::DbmsType::MySql);
DB 사용하기
- Query 직접 사용하기
// 테스트용 쿼리입니다.
// 해당 쿼리를 사용하기 위해서는
// DB에 UserId, Password, Country라는 Column을 가진
// UserData 테이블이 존재해야 합니다.
// 트랜잭션 시작
conn.BeginTrans();
// 쿼리 실행 코드
// 아래 예시는 테스트 용 쿼리입니다.
// 해당 쿼리를 사용하기 위해서는
// DB에 UserId, Password, Country라는 Column을 가진
// UserData 테이블이 존재해야 합니다.
conn.Execute(Proud::String::NewFormat(L"insert into UserData (UserID, Password, Country) VALUES(%s, %s, %d)", L"test", L"password", 1));
// 트랜잭션 commit
conn.CommitTrans();
- Stored procedure 사용하기
// 명령문 정보를 담을 CAdoCommand
Proud::CAdoCommand cmd;
// Return 데이터를 담을 CAdoRecordset
Proud::CAdoRecordset rec;
// AddUserData 라는 procedure가 존재해야 합니다.
cmd.Prepare(conn, L"AddUserData");
// 파라미터를 추가합니다.
cmd.Parameters[1] = L"test";
cmd.Parameters[2] = L"password";
cmd.Parameters[3] = 1;
// procedure 실행
cmd.Execute(rec);
rec.Close();
// 명령문 정보를 담을 CAdoCommand
Proud::CAdoCommand cmd;
// Return 데이터를 담을 CAdoRecordset
Proud::CAdoRecordset rec;
// AddUserData 라는 procedure가 존재해야 합니다.
cmd.Prepare(conn, L"AddUserData");
// MSSQL과 달리 AppendParameter을 호출해야만 한다.
// Need to call AppendParameter instead of MSSQL.
cmd.AppendParameter(L"InUserID", ADODB::adVarWChar, ADODB::adParamInput, L"test", wcslen(L"test"));
cmd.AppendParameter(L"InPassword", ADODB::adVarWChar, ADODB::adParamInput, L"password", wcslen(L"password"));
cmd.AppendParameter(L"InCountry", ADODB::adInteger, ADODB::adParamInput, 1);
cmd.Execute();
rec.Close();
- CAdoRecordset 데이터 읽기
Proud::AdoRecordset rec;
// 마찬가지로 DB에 UserData 테이블이 존재해야 합니다.
rec.Open(conn, Proud::DbOpenFor::OpenForReadWrite, L"select * from UserData");
Proud::String strID, strPassword, strCountry;
while (rec.IsEOF() == false)
{
strID = ((Proud::String)rec.FieldValues[L"UserID"]).GetString();
strPassword = ((Proud::String)rec.FieldValues[L"Password"]).GetString();
strCountry = ((Proud::String)rec.FieldValues[L"Country"]).GetString();
wprintf(L"UserID : %s, Password : %s, Country : %s\n", strID.GetString(), strPassword.GetString(), strCountry.GetString());
rec.MoveNext();
}
Proud::AdoRecordset rec;
// 마찬가지로 DB에 UserData 테이블이 존재해야 합니다.
rec.Open(conn, Proud::DbOpenFor::OpenForReadWrite, L"select * from UserData");
Proud::String strID, strPassword, strCountry;
while (rec.IsEOF() == false)
{
strID = rec.FieldValues[L"UserID"];
strPassword = rec.FieldValues[L"Password"];
strCountry = rec.FieldValues[L"Country"];
wprintf(L"UserID : %s, Password : %s, Country : %s\n", strID.GetString(), strPassword.GetString(), strCountry.GetString());
rec.MoveNext();
}
Last updated
Was this helpful?