.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 방식으로 하는 습관을 들이시기 바랍니다. 저도 아직 습관이 들지 않아 귀찮아서 저렇게 해버렸어요 ㅎㅎ


이렇게 첫번째 이야기는 글을 줄입니다. 다음에 다시 올께요!


출처 - http://rifel.net/entry/C-MySQL-사용하기-1탄-MySqlDataReader
이올린에 북마크하기(0) 이올린에 추천하기(0)
Posted by 의주