[게임 서버] 7.10 게임 서버에서 질의 구문 실행

게시:     수정

카테고리:

태그:

이 글은 아래의 책을 자세히 정리한 후, 정리한 글을 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를 사용할 수 있다.
  • 단, 이 방법은 일반적이지 않다.

GameServer 카테고리 내 다른 글 보러가기

댓글남기기