[게임 서버] 7.10 게임 서버에서 질의 구문 실행
카테고리: GameServer
태그: GameServer
이 글은 아래의 책을 자세히 정리한 후, 정리한 글을 GPT에게 요약을 요청하여 작성되었습니다.
게임 서버 프로그래밍 교과서, 배현직 저자
📦 7. 데이터베이스 기초
👉🏻 10. 게임 서버에서 질의 구문 실행
🔗 1단계: 연결 객체 생성
DbConnection db = new DbConnection();
db.Open("server=db01.mygame.com;userid=serverbot;password=good_day_one;database=GameDB");
- 연결 문자열이나 연결 정보 구조체를 넣어준다.
- 데이터베이스 입장에서 게임 서버도 가상 사용자와 비슷하게 취급된다.
🛠️ 2단계: 명령 객체 생성
DbCommand cmd = new DbCommand(db);
- 질의 구문을 실행할 객체를 생성한다.
- 이후, 질의 구문 실행은 아래 방법 중에 선택한다.
▶️ 3단계: 명령 객체 실행
📝 INSERT
방법 1 - 하드 코딩
cmd.Execute("insert into table1 (a,b,c) values (123,456,789)");
방법 2 - 파라미터
cmd.Parameters[0] = 123;
cmd.Parameters[1] = 456;
cmd.Parameters[2] = 789;
cmd.Execute("insert into table1 (a,b,c) values (?,?,?)");
방법 3 - 파라미터 + 저장 프로시저
cmd.Parameters[0] = 123;
cmd.Parameters[1] = 456;
cmd.Parameters[2] = 789;
cmd.Execute("InsertRecord")
✅ 권장: 파라미터에 채워질 값을 입력하는 방식(방법 2, 3)을 사용할 것을 권장한다.
🔍 SELECT
❌ 권장하지 않는 방식
cmd.Parameters[0] = 123;
DbRecordSet rs = cmd.Execute("select (a,b,c) from table1 where>=?");
foreach(DbRecord in rs) {
int a = r.GetField("a");
int b = r.GetField("b");
string c = r.GetField("c");
...; // 얻은 필드 사용
}
- 프로그래밍 언어와 데이터베이스의 타입은 완전히 일치하지 않기 때문에 좋지 않다.
✅ 권장하는 방식
cmd.Parameters[0] = 123;
DbRecordSet rs = cmd.Execute("select (a,b,c) from table1 where a>=?");
foreach(DbRecord r in rs) {
DbVariable vA = r.GetField("a");
if(vA.isNull() == false) int a = vA.Convert(int);
DbVariable vB = r.GetField("b");
if(vB.isNull() == false) int b = vB.Convert(int);
DbVariable vC = r.GetField("a");
if(vC.isNull() == false) int c = vC.Convert(string);
...; // 얻은 필드 사용
}
- 귀찮더라도, 값을 검증/변환해주어야 한다.
⚠️ 예외: SetField를 이용한 레코드 구성
DbVariable v = new DbVariable(DbType.integer, 123);
record.SetField("a", v);
- DB에 보낼 레코드(row)를 메모리에서 먼저 구성하고, DB에 넘겨 INSERT/UPDATE를 하고 싶을 때
SetField를 사용할 수 있다. - 단, 이 방법은 일반적이지 않다.
댓글남기기