ODBC API
ADO API 와 마찬가지로 ODBC를 활용하여 DB 사용하기 또한 가능합니다.
아래 설명은 git 예시 코드를 기반으로 작성되었습니다.
객체 정의
// 연결을 설정할 객체
Proud::COdbcConnection conn;
// 명령을 설정할 객체
Proud::COdbcCommand cmd;
// 쿼리 결과를 담을 객체
Proud::COdbcRecordset record;
// 쿼리 에러를 담을 객체로 사용하지 않아도 무방합니다.
Proud::COdbcWarnings warnings;
DB 연결하기
Open 함수에 파라미터로 들어가는 구문은 Connection Strings 규칙을 따릅니다.
conn.Open(Proud::String::NewFormat(L"Driver={ODBC Driver 17 for SQL Server};Server=localhost;Trusted_Connection=yes;"), &warnigs);
conn.Open(Proud::String::NewFormat(L"Driver={MySQL ODBC 8.0 Unicode Driver};Server=127.0.0.1;Port=3306;Uid=proud;Pwd=proudnet123;Option=3;"));
DB 사용하기
- Query 사용하기
conn.BeginTrans();
// 사용 예시 1
conn.Execute(_PNT("CREATE TABLE test(id int primary key, name nvarchar(30))"));
// 사용 예시 2
Proud::String query = _PNT("INSERT INTO test(id) VALUES(1)");
result = conn.Execute(query);
conn.CommitTrans();
// 사용 예시 1
conn.Execute(_PNT("CREATE TABLE test(id int primary key, name varchar(30))"));
// 사용 예시 2
Proud::String query = _PNT("INSERT INTO test(id) VALUES(1)");
result = conn.Execute(query);
- Query prepare 사용하기
int id;
Proud::String name;
cmd.Prepare(conn, _PNT("INSERT INTO test(id, name) VALUES(?, ?)"));
cmd.AppendInputParameter(&id);
cmd.AppendInputParameter(&name);
id = 5;
name = _PNT("Nettention");
result = cmd.Execute();
- Stored procedure 사용하기
int ret;
int id;
Proud::String name;
// input parameter만 있을 경우
cmd.Prepare(conn, _PNT("{call insertTest(?,?)}"));
cmd.AppendInputParameter(&id);
cmd.AppendInputParameter(&name);
id = 8;
name = _PNT("SPTest");
result = cmd.Execute();
// output parameter가 존재할 경우
cmd.Prepare(conn, _PNT("{? = call outputTest(?,?)}"));
cmd.AppendOutputParameter(&ret);
cmd.AppendInputParameter(&id);
cmd.AppendOutputParameter(&name);
id = 5;
name.GetBuffer(100);
result = cmd.Execute();
name.ReleaseBuffer();
int id;
Proud::String name;
// input
cmd.Prepare(conn, _PNT("call insertTest(?,?)"));
cmd.AppendInputParameter(&id);
cmd.AppendInputParameter(&name);
id = 8;
name = _PNT("SPTest");
result = cmd.Execute();
// output
cmd.Prepare(conn, _PNT("call outputTest(?,?)"));
cmd.AppendInputParameter(&id);
cmd.AppendOutputParameter(&name);
id = 5;
name.GetBuffer(100);
result = cmd.Execute();
name.ReleaseBuffer();
- Recordset으로 데이터 읽기
int id;
Proud::String name;
result = conn.Execute(record, _PNT("SELECT * FROM test"));
while (record.MoveNext())
{
id = record.GetFieldValue(_PNT("id"));
name = record.GetFieldValue(_PNT("name"));
_tprintf_s(_PNT("id = %d, name = %ws\n"), id, name.GetString());
}
Last updated