2019년 6월 13일 목요일

[1] 패스오브엑자일(Path of Exile) 플레이 (개요 2편, 캐릭터, 시스템 설명)

저번편에선 POE의 장르에 대해 이야기 했었으니 이번에는 본격적으로 플레이를 보시는데 꼭 필요한 게임 시스템과 기본 팁에 대해 알아보겠습니다. ^^

이 게임은 아무래도 시작은 디아블로2의 모드였기 때문에 분위기를 비롯한 시스템도 상당히 비슷한게 많습니다.

예를 들면
캐릭터들의 소개를 각자의 개설에 맞춰 멋지게 표현한 캐릭터 선택 화면도

이렇게 비슷하게 구현되어 있죠 ㅎㅎ

디아블로2는 오리지널 5개, 확장팩 2개 총 7개의 캐릭터였듯 POE도 6개의 기본 캐릭터에 퀘스트로 해금하는 1개의 캐릭터, 총 7개의 캐릭터가 있는데요. 이 7개의 캐릭터는


타격과 마법 모두 능통한 템플러


민첩성과 마법을 섞어 빠른 암살을 노리는 쉐도우


힘과 체력에 주력한 머라우더


민첩과 원거리 타격에 능한 레인저


빠르면서도 강력한 전사인 듀얼리스트


상태가 너무 위험해 보이는 마법사 위치


힘과 민첩 지능 모두를 고르게 갖춘 벨런스형의 사이온이 있으며

이 캐릭터들은 이후 전직을 통해 좀 더 차별화 된 능력을 가지게 됩니다.


요렇게 날라 다니는 위치의 경우 상위 직업으로


총 세가지가 있으며


주로 소환 관련 스킬들을 강화 시켜주는 네크로맨서


카오스라는 속성과 저주 관련 스킬에 특화된 오컬티스트


화염, 냉기, 전기 3원소 관련 스킬들의 위력이 증가하는 엘리멘탈리스트 중 한가지로 승급을 거친 뒤 전직이 가능합니다.

위치 외에도


듀얼리스트


쉐도우


머라우더


레인저


템플러 모두 세 가지의 상위 직업을 가지고 있지만


마지막 사이온은 상위 직업이 어센던트 하나인 대신 위에 나열된 모든 상위 직업의 특성 중 몇 개를 가져올 수 있는 특이한 옵션을 가지고 있죠.

이러한 전직 시스템과 더불어 디아블로와 차별화 된 시스템이 바로 스킬인데요.

디아블로에선 스킬이 사용자로부터 입력 받아 직접 사용하는 액티브 스킬과


(디아블로2 소서리서의 액티브 스킬인 차지드 볼트)

사용자의 명령과 상관없이 항상 캐릭터에게 스킬 옵션이 적용되는 패시브 스킬 두가지로 나뉘며 캐릭터별로 스킬 트리가 정해져 있습니다.


(소서리스의 라이트닝 관련 스킬 트리. 위 스킬들은 소서리스만이 정해진 조건에 따라 사용 할 수 있다.)

스킬 트리 외의 스킬은 오직 아이템 옵션에 붙어 있는 스킬 보너스를 통해서만 가능하죠.


(소서리스가 아닌 다른 캐릭터들은 룬워드 아이템인 수수께끼에 붙어 있는 텔레포트 옵션을 통해서만 텔레포트를 사용 할 수 있습니다.)

하지만 POE는 액티브 스킬은 아이템에 착용하는 잼으로 얻으며


(폭발 덫이라는 잼이 갑옷에 있는 홈에 착용되면)


(해당 아이템을 착용시엔 폭발 덫 스킬을 사용할 수 있습니다.)

패시브 스킬 또한 잼을 통해 획득 할 수 있지만


(액티브 스킬의 관통력을 올려주는 패시브 스킬을 잼을 통해 획득)

대부분의 패시브 스킬과 스탯들은


이 방대한 스킬 트리를 통해 획득하게 됩니다.

이 스킬 트리에는 패시브 스킬 뿐만 아니라 스탯 또한 포함되어 있으며


지능형 스탯과 스킬들은 12시 위주로 분포 되어 있고, 힘은 8시, 민첩은 4시 방향으로 분포 되어 있고


각 캐릭터 별로 스킬 트리 시작 위치가 다르게 설정되어 있습니다.

12시 = 위치
02시 = 쉐도우
04시 = 레인저
06시 = 듀얼리스트
08시 = 머라우더
10시 = 템플러
중앙 흰색 = 사이온

의 시작 위치로 스킬잼과 마찬가지로 모든 스킬들은 필요 스킬 포인트의 차이만 있을뿐 캐릭터 클래스의 제한을 받지 않고 자유롭게 사용할 수 있다는 특징이 있습니다.

따라서 POE의 모든 캐릭터는 스킬잼 + 전직 + 패시브 스킬 트리의 조합을 통해 정말 다양한 개성을 가진 캐릭터로 육성하는 재미가 많은 장점을 가지고 있죠. ^^

아직 몇가지 설명을 하지도 않았는데 움짤들이 많으니 페이지 크기가 많이 커졌네요. ㅎㅎ

다음편에 계속 이어서 가겠습니다!

긴 글 봐주셔서 감사합니다!

페스오브엑자일 플레이 2편 보러가기
패스오브엑자일 플레이 관련 전체 리스트

(이전 시리즈들과는 이번 POE 시리즈부턴 좀 더 색다르게 움짤과 영상을 많이 넣어가며 작성하다보니 작성 시간은 훨씬 많이 걸리지만 만들고 난 뒤에 페이지를 보면 훨씬 만족도가 높아서 아직까진 너무 좋네요 ㅎㅎ)
Share:

2019년 6월 12일 수요일

[88] 악튜러스 플레이 후기 4편

(악튜러스 OST - 시련)

(이번 포스팅은 먼저 악튜러스 개발자께서 작성한 개발 비화를 함께 보시고 읽으시는 걸 추천드립니다. 링크 : 악튜러스 후일담 )


드디어 길었던 악튜러스의 마지막 편입니다. ^^

2012년쯤 네이버 블로그에 올렸었던 악튜러스 플레이 포스팅은 아이템 설명까지 포함하여 41편짜리 시리즈였으나 이번에 새롭게 리뉴얼 하는 과정에서 좀 더 상세히 적다 보니 무진장 분량이 늘어나면서 무려 88편으로 마무리되었습니다.

처음에는 이 앞의 고인돌과 같이 그냥 포스트 그대로 이사 시킬 생각이었는데 마음에 안 들던 콘셉트와 문장 몇 개를 수정하다 보니 나중에는 전부 뜯어고치는 수준이 되어버렸습니다.

그렇게 고쳐 나가다 보니 포스트에 있던 이미지 만으로는 설명이나 전투가 매우 부실한 게 눈에 띄어


(네이버 블로그에 올렸던 원본 중 하나인데 이땐 최종전임에도 촉매 마법인 비스커스를 연사하며 가볍게 클리어하며 끝냈었더라구요.)

추가 이미지를 찍기 위해 당시 플레이를 저장했던 세이브 파일을 살펴보니


슬프게도 파일이 모두 깨져 있어서 ㅠㅠ

이전 포스트를 따라가며 플레이를 한 번 더 하면서 내용을 추가했습니다..


(그렇게 2회차 플레이로 탄생한 노 촉매 보스전. 촉매 마법과 튱클레티가 없으니 상당히 고전하며 클리어 한 모습이죠 ^^)

다행히도 이렇게 2회차 플레이를 통해 원본의 부족함을 채워 넣었지만 두 플레이의 동기화는 완벽하진 않아서 게임 해상도나 아이템 세팅, 캐릭터 체력, 순서 등 자세히 보시면 묘하게 다른 점을 발견하실 수 있을 겁니다. ㅎㅎㅎ


다시 게임 이야기로 돌아와서 그동안 플레이와 스토리 리뷰를 작성하며 느꼈던 가장 아쉬웠던 점은 역시 게임의 초중반의 신선했던 캐릭터와 스토리가 1장을 끝으로 급격하게 무너졌다는 점입니다.

특히나 장르와 전투 시스템 모두 그란디아의 표절이라는 엄청난 약점을 가졌던 악튜러스 입장에선 더욱 크게 다가오는 부분이겠죠.

게임을 시작한 초중반에는


이렇게 화목하고 아름다웠던 도시가


고어 던전이 되어버린다던지


나올때마다 빵빵 터트려준 마리아같이 정말 신나게 몰입되는 구간이었지만...


점점


게임 시스템의 미완성 부분이 보이기 시작하더니

시즈들이 느부갓네살에서 매장된 2장부터는 스토리마저 함께 추락하기 시작합니다.

사소한 이벤트나 떡밥의 방치는 둘째치고 가장 핵심 스토리 부분에서도 말도 안 되는 부분들이 발생하는데

첫 번째로는 시즈를 플레어 부부에게 방치했던 센크라드를 들 수 있습니다.


센크라드는 형제이자 가장 든든한 아군을 죽여가며 확보한 시즈를


이후 변덕이 생겨 플레어 부부에게 양육을 부탁했으나


플레어 부인이 사망한 뒤 시즈가 학대 당하며 살아왔음에도 센크라드는 완전히 이들을 방치해 두었다는 점이죠.

시즈의 중요성을 누구보다 알아서 유일한 형제까지 죽여가며 확보에 열을 올린 인물이 이후 17년 동안 죽었는지 살았는지 소식조차 모르고 지냈다는 건 정말 이해가 되지 않는 부분입니다.

이로 인해 엄한 임펜저는 엘리자베스의 인형이 되어버리는 참사가 발생한데다, 교단은 베어먼에 의해 천천히 타락이 진행되고 있었는데 그 모든 걸 알고 막을 힘도 충분했던 이 인간의 행방이 그냥 공백인 점이 이후 2장부터 시작되는 이야기에 몰입감을 떨어트리는 요소로 발전합니다.

그냥 센크라드가 임펜저의 발악으로 동귀어진을 당해 겨우 목숨만 붙어 있었다고만 했었어도 훨씬 이야기가 자연스러웠을 건데 참 아쉽습니다.

이렇게 부자연스럽게 시작된 이야기라 그런지 2장에 등장하는 괴노인의 뒤통수 이야기도 부자연스러운 연출이 이어집니다.

센크라드에 이어 스토리의 구멍이 되어버린 두 번째 인물은 바로 육노인인데요


가장 클리어하기 어려웠던 보스이자 공화국의 흑막이었던 육노인!

후반부 천사와 함께 유이하게 시즈들을 이겼던 차원이 다른 전투력과, 불사의 몸을 통한 700년의 시간까지, 최강의 스펙을 가졌던 이들이지만 게임을 시작하고부턴 뭘 잘못 먹었는지 말도 안 되는 실수를 연발합니다.


(깔끔하게 본진 털리기)

이들은 본인들이 제국에 있던 달란트를 탈취해 여기저기 뿌려두었음에도 왜 뿌렸는지 잊어버린 듯 달란트에 대한 관리를 전혀 하질 않아 위에서처럼 엘리자베스가 7개의 달란트를 이용해 뒤통수 치는 걸 그냥 바라만 보며 당해버렸고


(보이스피싱 무지하게 잘 당할꺼 같은 육노인들..)

그 강력한 힘을 가지고도 엘하이브에 숨어있다가 괴노인을 통해 제거되는 허무한 퇴장을 당하게 됩니다.

센크라드 이상의 트롤 행위를 했음에도 가장 중요한 1장 후반부에 이들의 행적은 나오질 않으니 이후 극적인 반전이 벌어지는 순간에도 플레이어들이 이해를 못 해 공감하지 못하는 안타까운 상황이 발생합니다.


육노인 제거의 가장 큰 공을 세운 괴노인 또한 억지스러운 개그 장면으로 억지로 상황을 넘김으로 주인공 파티 행보에 대한 답답함과 부자연스러움이 더욱 부각되죠.

1장의 센크라드, 2장의 육노인에 이어 마지막 3장의 스토리 구멍은 바로 넘사벽 이미지에서 동네북이 되어버린 제국 황제입니다.

설정상 제국은 초대 팔 황제 이후로 달란트와 함께 대륙의 최강국으로 군림하던, 옆에 왕국을 속국으로 끼고 있고 공화국의 육노인들도 방어에 급급했던 강력한 국력을 가진 나라였는데 2장에서 수도가 폭격당하고, 이후 2년간 처절한 내전까지 겪었던 공화국에게 불과 며칠 만에 수도 근방까지 함락 당하고


황제는 텐지의 소식에 오성왕만 데리고 도주하다


자멸하고


제국 수뇌부가 불과 일주일도 못 버티고 전멸해버리는 사태가 발생합니다.

제국은 센크라드와 육노인들과는 달리 엘리자베스의 영향권이기 때문에 괴노인과 같은 방해 공작을 받질 않았고 제국 내부 동성파들 또한 프리셀로나가 수도에 입성한 뒤에야 연합을 했을 정도로 전력에 손실이 없었는데


그 프리셀로나 군마저도 소극적인 전력임에도 플레이어 입장에는


콘스텔라리움으로 출발을 한 뒤


전투 이벤트 하나 없이 콘스텔라리움 제국이 위험하다는 소식을 알게 됩니다.

그리고 수도에 들어가면


황제는 도주 중인 어이없는 상황을 맞이합니다..

아무리 제국이 메인 악당이 아니라곤 하지만 대사 하나 없이 이렇게 이야기가 넘어가버리면 플레이어 입장에선 잘 보던 영화를 몇 분간 스킵하고 이어서 봐야 하는 입장이 되는데 이렇게 되면 가장 중요한 부분들도 자연스럽게 몰입도가 떨어진 채로 플레이어들은 경험하게 되겠죠... ㅠㅠ

연기나 연출이 조금 어색한 부분이 있어도 소재와 서사가 좋으면 영화든 드라마든 끝까지 보는 개인적인 입장에선 너무 아쉬워서 이렇게 리뷰 마지막에 길게 이야기했습니다. ^^;

이젠 죽어버린 국산 패키지 게임 시장이지만 당시엔 복돌이에 대한 혐오 여론이 시장까지 몰락 시켰다는 이야기가 많았었는데 게임 제작자의 입장에서 복돌이를 혐오하는 건 당연했지만 (저도 프로그램 개발을 업으로 하는 입장으로 당연히 비슷한 감정이 있습니다.) 반대로 그 혐오 여론에 개발자들은 복사를 쉽게 할 수 있던 환경에서도 돈 주고 매번 구입해서 사용하던 정품 유저들의 대한 책임감을 묻어버린 게 아닐까 생각합니다.




원래 처음 포스트를 시작했을 때 계획은 후기를 마친 뒤 조주연 캐릭터들 이야기와 기술 마법 관련한 내용들도 작성할 계획이었는데 후기를 4편이나 작성하면서 너무 우려먹는 게 아닌가 하는 생각이 들어서 이번 편을 마지막 편으로 생각하고 작성하였습니다. ^^

혹시나 만약에 악튜러스 관련 다른 정보를 요청하신다면 언제든 추가로 붙여 작성하겠습니다 ㅎㅎ 물론 추천받는 게임도 있으니 많이 댓글 부탁드립니다!

너무 긴 글 여기까지 봐주셔서 정말 감사합니다!

저는 다음 게임 포스팅에서 뵙겠습니다. ㅎㅎ

모두 행복하세요!

악튜러스 관련 전체 포스트 리스트 바로가기
Share:

2019년 6월 10일 월요일

[0] 패스오브엑자일(Path of Exile) 플레이 (개요 1편, 핵앤슬래시 게임)

안녕하세요!

악튜러스에 이어 이번에 포스팅할 게임은 현재 핵 앤 슬래시 장르를 주도하는 세 개의 게임 중 하나인


패스 오브 엑자일 (Path of Exile)입니다.

그동안 블로그에서 포스팅했던 게임들은 모두 공략이 완료되고, 저작권에 자유로웠던 고전게임 위주였던 반면에 이번 패스 오브 엑자일(앞으론 POE라 부를께요)은 나온 지 6년밖에 되지 않은 매우 젊은(?) 게임입니다 ^^

이 게임을 악튜러스에 이은 다음 플레이 대상으로 정한 이유는

1. 스토리 분기점인 엑트가 무려 10장에 달할 정도로 스토리 분량이 매우 크며
2. 온라인 게임이라 플레이 포스팅에 저작권이 비교적 자유롭고
3. 최근 카카오를 통한 국내 퍼블리싱이 완료되어 포스팅을 하기 딱 좋은 시기의 게임으로 생각되어 플레이를 시작하게 되었습니다. ^ㅡㅡ^

이번 플레이도 역시 이전 게임들과 마찬가지로 캐릭터 육성과 함께 스토리 중심으로 소개할 생각입니다.


POE의 시작은 핵 앤 슬래시 장르의 알파이자 오메가인 블리자드의 디아블로인데요.

콘텐츠를 만드는 능력은 신급이었던 반면 만들어진 콘텐츠를 운영하는 능력은 치명적으로 무능하고 게으른 블리자드는 이 엄청났던 디아블로의 팬덤을


이 녀석과


이 녀석으로 모조리 날려버리며 스스로 몰락해 버립니다.

그렇게 허공에 떠버린 팬덤은 이후 세 개의 게임으로 나누어져 지금 현재 핵 앤 슬래시 장르 삼대장 게임으로 남게 됩니다.

그 삼대장 중 첫번째는 콘텐츠 부족과 실망감으로 팬덤이 붕괴 중이나 여전히 거대한


디아블로3!


두번째는 스마일게이트의 대작 로스트아크!

마지막으로 디아블로 팬픽과 모드로 시작되었던 이번 포스팅의 주인공인


POE가 되겠습니다.

이중 로스트아크는 이 셋 중 가장 나중에 출시되어 디아블로와 장르만 유사할 뿐 분위기와 시스템은 이전 국산 온라인 게임을 많이 따라가서 완전히 다른 게임이지만 POE는 디아블로의 분위기와 시스템에 아쉬웠던 부분을 채워 넣은 게임이라 처음엔 디아블로의 아류작 소리를 들었지만

스스로 몰락해버린 블리자드와 매우 창의적인 콘텐츠 보완으로 지금은 과거 디아블로 팬덤을 그대로 흡수한 채 디아블로의 완성을 보여주었다는 게임으로 평가받고 있습니다.

덕분에 앞으로의 POE 관련 포스트에서 디아블로의 이야기는 자주 등장할듯싶습니다.

POE에 대한 대략적인 배경 설명은 끝났고 이제 다음 편은 본격적인 게임 플레이에 필요한 기본 시스템 소개와 플레이 룰에 대한 이야기로 돌아오겠습니다!

게임 플레이 포스팅인데 첫 편부터 어째 역사 이야기나 주변 정보만 있는 디아블로처럼 수면 성분 가득한 포스트가 되어버렸네요 ㅎㅎㅎ

긴 글 봐주셔서 감사합니다 ^^ 다음 편에서 뵙겠습니다!

패스오브엑자일 플레이 관련 포스트 리스트
패스오브엑자일 플레이 1편 보러가기
Share:

블로그 복귀


위 글은 지난 9개월 동안 제 블로그의 최신 글을 담당했던 녀석이었는데요.

부끄럽게도 9개월 만에 새로운 포스트로 찾아뵙게 되었습니다.

처음 블로그를 시작했던 마음가짐대로 시작한 콘텐츠는 끝을 내고 꾸준한 분량을 냈었어야 했는데 블로그 수익 정지가 되니 한번 흔들리고, 마침 인생에 있어 프리랜서로 새롭게 도전을 하게 되어 적응하다 보니 이제서야 마음의 여유를 되찾을 수 있었습니다.

이미 처음 블로그를 시작할 때 약속은 물 건너 가버렸지만, 그래도 힘든 순간 감사한 글을 남겨주신 방문자님을 생각하며 다시 시작해보겠습니다.

IT 기술 관련 내용들은 제가 계속 분야별로 발행을 하며, 악튜러스의 후기 부분 마지막 편을 완성 작업에 들어가겠습니다.

그리고 새로운 게임 시리즈로 이번 달에 한국에서도 정식 출시가 된 패스 오브 엑자일(Path of Exile)의 스토리 관련한 이야기를 시작할 계획입니다.

그 외 일본어는 제가 포스트를 작성하다 보니 포스트를 작성할 정도의 수준이 되질 않아 정말 느리게 작업이 되고 있으며, 잡담 관련으로는 지난 겨울에 다녀온 일본 여행 이야기를 신설해볼 생각입니다. ^^

형편없는 글에도 항상 방문해주시는 방문자님께 정말 감사합니다!
Share:

블로그 애드센스 적용 두번째 과정! (주소 확인 받기)

블로그를 개설하고 열심히 포스트를 작성한지 두 달이 지났을 무렵..


간신히 애드센스 2차 심사에 통과했다는 소식이 오고 블로그 광고가 올라가기 시작했습니다.
(당시 심사와 관련한 포스트 입니다. 애드센스 최종 가입)


그리고 다시 몇 달이 지나 총 광고 수익 금액이 10$가 넘었을 무렵...


위와 같이 애드센스 계정 정보에 청구서 수신 주소 확인이라는 새로운 내용이 생겼더라구요. 그래서 계정 정보에 등록된 주소를 다시 한번 확인한 뒤 금방 또 잊고 지내던 어느날...


???


갑자기 광고가 없어지는 현상이 발생하고


핀번호 입력이 완료될때까지 강제 휴업을 하게 되었습니다.

ㅠㅠ

그렇게 2달간의 강제 휴업 기간을 거친뒤



짜잔~ ^^

구글에서 보냈다고 하는 날짜 기준으로 3달이 지났을 무렵 매우 큰 우편물이 구글로부터 도착하였습니다 ㅎㅎ

구글 아시아쪽 담당 지부가 말레이시아에 있는 듯 말레이시아 소인을 찍고 온 이 우편물은


친절하게도 소인과 주소 부분을 빼고는 모두 한글로 적혀져 있었습니다.


양쪽 모서리 제거 후


그토록 기다렸던 핀번호를 확인하고


입력했더니


이렇게 강제 휴업 표시가 사라지고


블로그에 광고도 다시 올라오기 시작했습니다.

이제 애드센스 관련으로 남은 관문은


언젠가 100$를 넘긴 뒤 수익을 지급받기 위한


결제수단 인증과 수표 수령 관문만 남았습니다 ^^.

이상 구글 애드센스 주소 인증 과정이었습니다!
Share:

2018년 10월 3일 수요일

C#에서 데이터 베이스에 연결하고, 쿼리를 실행하는 방법 (Mssql, .net)

개념은 잘 알고 있어도 막상 필요할때 코드를 작성할려면 매서드와 순서가 잘 기억나지 않는 애들이죠 ^^

저도 기억이 나질 않을때를 대비할겸 이번엔 C#에서 디비 연동과 쿼리 실행 부분에 대해서 알아보겠습니다.

(DB는 MSSQL을 기준으로 작성합니다만 윈도우 인증 부분을 제외하면 똑같으니 상관 없겠죠)

1. DB 연동
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
using System.Data.SqlClient;
//DB connection
SqlConnection sqlConnection = null;
//IP
string strDBIP = "127.0.0.1";
//ID
string strDBID = "user";
//PW
string strDBPW = "12345";
//DB
string strDBName = "dbName";
//DB 인스턴스 생성
public SqlConnection connSql()
{
   sqlConnection = new SqlConnection("server =" + strDBIP + "; uid =" + strDBID + "; pwd =" + strDBPW + "; database =" + strDBName);
   
   //윈도우 인증 계정일 경우엔
   sqlConnection = new SqlConnection("Server= localhost; Database= dbName Integrated Security = True;");
   
   //DB 오픈
   if (sqlConnection != null && sqlConnection.State == ConnectionState.Closed)
   {
       sqlConnection.Open();
   }
       return sqlConnection;
   }
}
//DB 연동
sqlConnection = connSql();

공통 파일에 위와 같은 매서드를 만들어 두고 35#와 같이 사용하여 디비와 연결할때 사용합니다.


2. 파라미터가 없는 일반 조회 쿼리
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
//조회 결과 데이터셋
DataSet Lds = new DataSet();
//쿼리
string srQuery = "SELECT * FROM TABLE;";
//DB 연결
SqlConnection sqlConnection = connSql();
//조회 요청
try
{
   SqlConnection sqlConnection = connSql();
   SqlDataAdapter Ldap = new SqlDataAdapter(srQuery, sqlConnection);
   //조회결과 저장
   Ldap.Fill(Lds);
}
catch (Exception exe)
{
   Console.WriteLine("조회 도중 에러 발생 : " + exe.Message);
}

1번의 방법으로 DB 인스턴스를 생성한 다음 15#의 SqlDataAdapter를 통해 쿼리를 실행한 다음 실행 결과를 18#에서 데이터셋에 담습니다.

조회 결과를 사용할땐
1
Lds.Tables[0].Rows[i][j].ToString().Trim();

요렇게 꺼내어 입맛에 맞는 형으로 변환시켜 사용합니다.

위에서 i부분은 조회 결과 열의 해당하고

j는 행에 해당합니다.

만약에 조회 결과가 2X2 형식인



이와 같다면 1행의 1열 데이터인 1을 사용할려면


1
Lds.Tables[0].Rows[0][0].ToString().Trim();

이렇게 0,0을 넣으시면 되고

2행의 2열 데이터인 4을 사용할려면


1
Lds.Tables[0].Rows[1][1].ToString().Trim();

1,1을 넣으시면 됩니다.



2. 실행 결과가 성공, 실패로 돌아오게 되는 추가, 삭제 쿼리 실행하는 방법

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
//쿼리 파라미터가 2개 들어가는 INSERT 쿼리
string srQuery = "INSERT INTO TABLE (COLSUMN1 ,COLUMN2) VALUES (@p1 ,@p2);";
//DB 연결
SqlConnection sqlConnection = connSql();
//저장 요청
try
{
   SqlConnection sqlConnection = connSql();
   SqlCommand commS = new SqlCommand(srQuery, sqlConnection);
   commS.Parameters.AddWithValue("@p1", "변수1");
   commS.Parameters.AddWithValue("@p2", "변수2");
                
   //쿼리 실행
   commS.ExecuteNonQuery();
}
catch (Exception exe)
{
   Console.WriteLine("저장 중 에러 발생 : " + exe.Message);
}

이번엔 값을 반환하는 SqlDataAdapter 대신 결과를 반환하는 SqlCommand을 사용하여 파라미터를 추가한 다음 쿼리를 실행합니다.

쿼리 실행 결과 자체로도 성공, 실패 여부를 알 수 있지만 위와 같이 그냥 TRY/CATCH문으로 해결하였습니다.

삭제도 쿼리만 다를 뿐 방식은 동일하며 조회도 조회 결과가 필요 없을 경우 위와 같은 방법으로 사용해도 상관 없습니다.



3. 파라미터가 있는 조회 쿼리

이번엔 쿼리 실행 결과 값도 필요하면서 파라미터도 넣어야 하는 상황인데요.

뭔가 어려울꺼 같지만 실제로는 1번에서 사용한 SqlDataAdapter 클래스에 파라미터를 넣는 매서드가 있어서 매우 간단히 해결할 수 있습니다 ^^

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
//조회 결과 데이터셋
DataSet Lds = new DataSet();
//쿼리 파라미터가 2개 들어가는 SELECT 쿼리
string srQuery = "SELECT * FROM TABLE WHERE COLUMN1 = @P1 AND COLUMN2 = @P2;";
//DB 연결
SqlConnection sqlConnection = connSql();
//조회 요청
try
{
   SqlConnection sqlConnection = connSql();
   SqlDataAdapter Ldap = new SqlDataAdapter(srQuery, sqlConnection);
   Ldap.SelectCommand.Parameters.Add(new SqlParameter("@P1", "변수1"));
   Ldap.SelectCommand.Parameters.Add(new SqlParameter("@P2", "변수2"));
                
   //조회결과 저장
   Ldap.Fill(Lds);
}
catch (Exception exe)
{
   Console.WriteLine("조회 중 에러 발생 : " + exe.Message);
}

1번의 방식에서 쿼리를 실행하기 전에 SelectCommand.Parameters.Add() 매서드를 통해 원하는 파라미터를 순서대로 지정해서 넣어주시면 됩니다.

잘못된 내용이나 궁금한점은 언제든 남겨주세요 ㅎㅎ
Share: