.NET 은 기본적으로 ODBC 및 OLEDB, MS-SQL을 지원합니다.
그중에서도 같은 MS 제품인 MS-SQL을 사용할때가 가장 간편하죠.

그래서 MySQL을 DB로 사용할 경우 아주아주 약간 귀찮아집니다.
먼저 MySQL Connector .NET이 필요합니다. 닷넷 전용 MySQL 커넥터지요.

5.1 버젼이 stable 안정 버젼인데, 이상하게 제가 소스로는 자꾸 Exception 오류가 뜨는 바람에 리노군의 구글링으로 5.2 버젼을 쓰면 정상적이다 라는 의견에 5.2 버젼으로 다시 설치해보니 아무런 오류가 뜨지 않더랍니다.

MySQL Connector .NET 5.2.2 다운로드
http://dev.mysql.com/downloads/connector/net/5.2.html

설치하였으면 이제 코드를 함 짜봐야죠. ㅎㅎ

먼저 요거 추가합니다.

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using MySql.Data.MySqlClient;

그리고 DB 커넥션 스트링을 만듭시다.

        // DB CONNECTION STRING.
        private string GBConStr()
        {
            string myConnectionString
               = "Database=management;Data Source=localhost;User Id=user;Password=passwd";
            return myConnectionString;
        }

일단 간단히 커넥션 함수를 만들어 주고...

        private void Login_Btn_Click(object sender, EventArgs e)
        {
            if (LoginValidate() == true)
            {

                MessageBox.Show("로그인 되었습니다.", "로그인", MessageBoxButtons.OK, MessageBoxIcon.Information);
                tbox_ID.Enabled = false;
                tbox_PW.Enabled = false;
                TopMenu.Enabled = true;
                Login_Btn.Visible = false;
                Logout_Btn.Visible = true;
            }
        }

접속을 시도할 이벤트를 만듭니다.
위 코드를 보면 알겠지만 Login_Btn 이라는 버튼을 클릭할 경우 일어나는 이벤트 입니다.
LoginValidate() 함수를 통해 정상적으로 로그인이 경우만 아래 조건을 수행합니다.


        private bool LoginValidate()
        {
            bool bTmp = true;

            MySqlConnection DBConnection;
            DBConnection = new MySqlConnection();
            DBConnection.ConnectionString = GBConStr();
           
            MySqlCommand Cmd;
            Cmd = new MySqlCommand();


            try
            {
                DBConnection.Open();
                Cmd.Connection = DBConnection;
                Cmd.CommandText
                    = "SELECT pk_UserNum, Name_Hangul, bStatus, bAdmin FROM mng_user WHERE Name_Hangul = '" + tbox_ID.Text + "' AND User_Passwd = '" + tbox_PW.Text + "' and bAdmin = 1";
                MySqlDataReader myReader;

                myReader = Cmd.ExecuteReader();
                if (!myReader.Read())
                {
                    MessageBox.Show("사용자 ID 나 비밀번호가 정확하지 않거나 관리자 권한이 없습니다.", "로그인", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    bTmp = false;
                }

                myReader.Dispose();
                myReader.Close();

                /*
                textBox1.Text = textBox1.Text + "\r\n현재 데이터베이스 : " + DBConnection.Database;
                textBox1.Text = textBox1.Text + "\r\n현재 연결 상태 : " + DBConnection.State;
                textBox1.Text = textBox1.Text + "\r\n데이터베이스 버전 : " + DBConnection.ServerVersion;
                */
            }
            catch (Exception E)
            {
                MessageBox.Show("데이터베이스 오류:\r\n" + E.Message + "\r\n" + E.StackTrace);
                bTmp = false;
            }
            finally
            {
                Cmd.Dispose();
                DBConnection.Dispose();
                DBConnection.Close();
            }
           
            return bTmp;
        }


가장 중요한 MySQL DB 커넥션 부분입니다.
대충 봐도 아주 쉽습니다. MS-SQL 쓸때와 동일한 구조죠.

1. 커넥션 변수를 선언한다.
2. 커맨드 변수를 선언한다.
3. DB 를 연다.
4. 쿼리를 실행한다.
5. 결과 값이 있느냐 없느냐를 조건으로 넣어준다.

                MySqlDataReader myReader;

                myReader = Cmd.ExecuteReader();
                if (!myReader.Read())
                {
                    MessageBox.Show("사용자 ID 나 비밀번호가 정확하지 않거나 관리자 권한이 없습니다.", "로그인", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    bTmp = false;
                }


요 녀석이 그러한 역할을 수행합니다.
MySqlDataReader를 통해 데이터를 읽을게 있는지 없는지 간단하게 체크한 것입니다.

                Cmd.CommandText
                    = "SELECT pk_UserNum, Name_Hangul, bStatus, bAdmin FROM mng_user WHERE Name_Hangul = '" + tbox_ID.Text + "' AND User_Passwd = '" + tbox_PW.Text + "' and bAdmin = 1";
                MySqlDataReader myReader;

그러고보니 위와 같은 방법으로.. 쿼리를 직접 실행하게 하였는데 이럴 경우 SQL Injection 등 여러 문제가 있으니 parameter 방식으로 하는 습관을 들이시기 바랍니다. 저도 아직 습관이 들지 않아 귀찮아서 저렇게 해버렸어요 ㅎㅎ


이렇게 첫번째 이야기는 글을 줄입니다. 다음에 다시 올께요!
태그 : .net, c#, MySQL
profile image

삶이 꿈과 같은 네버랜드 주민 1호.

SFS(심플 파일 서버) 버젼 1.2

DEV | 2008/04/14 09:29 | FeLLEN

사용자 삽입 이미지
 
심플파일서버 버젼 1.2를 공개합니다. 외견상으로는 큰 차이가 없지만, 웹을 통해서 등록된 파일들 및 디렉토리를 검색할수 있는 기능을 추가했습니다. 디렉토리를 등록할시 모든 하부 디렉토리 또한 열수 있게 됩니다.

개인적인 용도로 사용되기 위한, C#으로 제작한 간단한 서버입니다. .NET 과 C#을 사용하여 구현하였습니다.

사용하기 위해서는 먼저 .NET을 다운받아야 합니다 (http://www.microsoft.com/downloads/details.aspx?FamilyID=0856EACB-4362-4B0D-8EDD-AAB15C5E04F5&displaylang=en)

그리고 간단히 SFS 실행파일을 다운받아서 실행하면 됩니다. 원하는 디렉토리에 압축을 풀고 사용해주세요.

사용시 질문사항이나 버그를 알려주시고 싶으신 분은 리플 또는 제 이메일(shepelt골뱅이bu.edu)을 통해서 알려주세요.
profile image

삶이 꿈과 같은 네버랜드 주민 1호.

웹서버 만들기

DEV | 2008/02/24 13:56 | FeLLEN

.NET 기반으로 C#을 이용하여 웹서버를 만들었어요.
옛날부터 만들어보고 싶었던 "가벼운 웹서버"가 있었는데 친구에게 말하니까 이미 HFS 라는게 있다고 하더라구요. 그래도 그거보다 더 가벼운 서버가 있었으면..해서 연습겸 해서 만들어버렸답니다.

만들면서 참고한건 Simple Threaded TCP Server 라는 강좌인데, 알기 쉽게 심플한 TCP서버를 직접 만들어가면서 설명해주어서 도움이 되었습니다.

C# 으로 윈도우즈폼즈, 그리고 .NET 프로그래밍을 하면서 항상 느끼는것이지만 비쥬얼스튜디오는 정말 괜찮은 개발 환경인것 같습니다. 실용주의 프로그래머라는 책에서 텍스트 에디터, 그리고 개발 도구들의 중요성을 강조한 이유가 있었던것 같아요. 이런식으로 프로그래밍을 하면 내가 바보가 되는건 아닐까..하고 느껴질 정도로 정말 아무 생각 없이, API 문서 한번 찾아보지 않고도 자연스럽게 프로그래밍을 할수 있더군요.
물론 객체지향 프로그래밍의 이점이라고 할수도 있겠군요.

몇일동안 노력한 끝에 그럭저럭 쓸만한 서버를 하나 짤수 있었는데, 아무래도 .NET 환경에서 돌아가는 이상 그렇게 가볍지만은 않은것 같습니다. 물론 생긴것만은 가볍게 생겼습니다만.

사용자 삽입 이미지

드래그&드롭, 그리고 클립보드를 사용해서 공유할 파일을 추가할수 있습니다. 물론 우클릭해서 직접 추가하거나 제거할수도 있고요. 생각보다 훨씬 간단하게 구현할수 있었던 기능들입니다.

다음에는 심플한 웹하드와 그리고 메신저를 만들어볼 생각입니다.
profile image

삶이 꿈과 같은 네버랜드 주민 1호.

XNA로 게임 만들기

DEV | 2008/02/02 14:05 | FeLLEN
사용자 삽입 이미지

마이크로소프트에서 개최하는 Imaginecup 에 출품하기 위한 게임을 XNA로 작업중입니다.
이제 3시간 후면 데드라인이어서 출품하게 되는데, 그렇게 자신은 없습니다.
다들 열심히 했지만 (지금까지 계속 게으름피우다가 막판에만) 원래 기획 단계도 미비했던게 있고, 너무 미완성인 부분이 많은것도 있어서 솔직히 말해서 즐겁게 즐길수 있는 게임을 만들었다고 자신할수는 없습니다.

솔직히 말하자면 팀으로 게임 작업하는건 처음입니다. 혼자서도 게임 프로그래밍을 몇번 기웃거려봤을뿐이지 제대로된 게임을 만들어본 경험은 없습니다. 다른 팀원들도 마찬가지고, 무작정 꿈만 컸던 격이지요.

물론 이게 미래를 위한 좋은 경험은 되겠지요. 아마 게임을 다시 만든다면 더 나은 작품을 만들수 있지 않을까 합니다.

게임 프로그래밍도, 사용되는 그래픽/사운드 리소스 제작도 쉽지 않지만 무엇보다 가장 어려운건 "재미있는 게임"을 만드는게 아닐까요. 초보자들은 그래서 단순한 게임을 만드는게 좋다라고 저는 생각합니다. 그러나 자라나는 어린싹인 우리 팀의 기획자님을 좌절시키고 싶지는 않았기에 조금은 무모하다고 생각된 기획을 그대로 실현시키기 위해서 노력했습니다.

XNA에는 많은 단점들이 있습니다. 아직은 중요한 "배포"도 쉽지 않은 상태이고, 또 지원이 미비한 기능들도 남아있습니다.  그래도 C# (그리고 .NET)이라는 훌륭한 언어와 개발 환경으로 게임 제작을 배운다는 점에 있어서는 이만한 게임 제작 환경도 없는것 같습니다.

지금 학교에서 OpenGL을 통해서 배우고 있는 컴퓨터 그래픽 강의도 열심히 들어야겠습니다.


XNA는 마소에서 무료로 제공하는 비쥬얼 스튜디오 익스프레스 2005를 통해서 쉽게 개발을 시작할수 있습니다.
혹시 XNA에 관심이 있으시다면 Riemer의 강좌를 한번 읽어보시는걸 추천해드립니다.

http://www.riemers.net/kor/Tutorials/XNA/Csharp/Series1/Starting_a_project.php
profile image

삶이 꿈과 같은 네버랜드 주민 1호.

지난주에 이어 이번주에도 MSDN 주간 세미나 시리즈 시즌 1 UX 얼티메이트에 다녀왔습니다.

이번주의 주제는 아래와 같습니다.

1. IIS Inspiration

     - Understanding ASP.NET Internals and IIS7

2. 실버라이트와 블렌드가 여는 RIA(Rich Internet Applications)의 세계

지난 번에 밥먹고 갔다가 김밥을 남기는 바람에 이번엔 저녁을 안먹고 갔지요. 다행히도 세미나가 끝나는 9시 반까지는 잘 버틸 수 있었습니다.

이 세미나에 대한 자세한 내용은 아래 사이트를 참고 하시고..
http://www.microsoft.com/korea/msdn/events/msdnweekly2/default.aspx
 

IIS7에 대해서, 간단히 설명하겠습니다.

1.
모듈 기반을 완전히 코드를 재작성 했다고 하네요.
필요한 모듈과 필요없는 모듈을 선택해서 설치할 수 있지만 몇몇 모듈은 모듈간 의존성도 있기 때문에 주의해야 한다 합니다.

2.
거의 모든 것을 ASP.NET으로 컨트롤 할 수 있게 되었습니다. IIS API가 추가되었습니다.
그럼으로 인해 ASP.NET 포함, 기타 다른 언어로도 쉽게 사이트를 추가하거나 정보를 변경하거나 수 있게 되었습니다.

3.
서버 관리자에게 더 편리할, 분산 서버 기능을 지원합니다.
호스트(혹은 대표 서버)의 IIS 설정을 변경하면 다른 IIS 서버들의 설정이 모두 같이 변경 시킬 수 있습니다.

4.
.NET 개발로 쉽게 커스텀 모듈을 만들어 붙일 수 있습니다.
 
* IIS7 에 대한 자료한 자료는 세미나 강사였던 송원석 씨의 개인 홈피에 자세히 올라와있습니다.
* http://www.egocube.pe.kr/asp_main.asp

 
두번째 세미나였던 실버라이트 & RIA 세미나는 정말 재밌었습니다.
훈스닷넷의 박경훈님이 정말 재밌게 진행을 하시더라구요. PT에서 나오는 우스꽝스런 갖가지 이미지들이 참 머리에 와닿았습니다. 박경훈님이 그랬죠. UX 개발자가 되어 보자고. 몸값을 올려보자고. 새로운 기술을 미리 익혀 앞서가자고(그랬나??)... 라는 그런 말들이 마음에 와닿더군요. 아직 ASP.NET 조차 하지 않고 있지만 이 참에 C# 도 공부하고 ASP.NET 도 하고 실버라이트도 살짝 만져봐야겠습니다. 미디어플레이어 하나 만들어봐야죠 ㅎㅎ

자세한 내용은 생략하겠습니다.


이번 세미나는 얻은게 많아서 재밌었네요.

profile image

삶이 꿈과 같은 네버랜드 주민 1호.