study

[C#] Log In

yz 2022. 6. 20. 18:04

common.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace MainForms
{
    internal class Commons
    {
        // 공통 변수 설정
        //public static string sLogInUserID = string.Empty; // 사용자 ID
        //public static string sLogInUserName = string.Empty; // 사용자 명

        // 사용자 정보 프로퍼티 생성
        public static string sLogInUserID // 사용자 ID
        { get; set; }

        public static string sLogInUserName // 사용자 명
        { get; set; }

        public static string sConnectInfo = string.Empty;
    }
}

M01_Login.cs

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
// SQL Server 에 접속할 수 있는 클래스 라이브러리
using System.Data.SqlClient;

namespace MainForms
{
    /*********************************************************
     * NAME : M01_LOGIN
     * DESC : 시스템 로그인
     * ------------------------------------------------------
     * DATE        : 2022.06.20
     * AUTHOR      : 김유진
     * DESCRIPTION : 최초 프로그램 작성
     * ------------------------------------------------------*/

    // WinFormApplication 강의의 목표
    // C# .NetFrameWork 기본 도구와 프로그래밍 문법을 사용하여 개발 솔루션의 프레임을 만들어보고
    // 시스템 개발 프레임 소스의 원리를 이해 및 기능을 습득한다.

    public partial class M01_Login : Form
    {
        int iCount = 0;
        // SQL Server 커넥터 객체 생성
        private SqlConnection Connect = null;
        public M01_Login()
        {
            InitializeComponent();
            Commons.sConnectInfo = "Server = localhost; Uid = sa; Pwd = 1234; database = AppDev";
        }

        private void btnLogin_Click(object sender, EventArgs e)
        {
            // 로그인 버튼 클릭
            DoLogin();
        }
        private void DoLogin()
        {
            try
            {
                // 데이터베이스 접속 경로 설정
                string strConn = Commons.sConnectInfo;

                // 접속 경로 커넥터 객체에 전달
                Connect = new SqlConnection(strConn);

                // 데이터베이스 접속 여부 확인
                Connect.Open();
                if (Connect.State != System.Data.ConnectionState.Open)
                {
                    MessageBox.Show("데이터박스 연결에 실패하였습니다.");
                    return;
                }

                string sLogInID = txtID.Text; // 사용자 ID
                string sPassWord = txtPW.Text; // 사용자 비밀번호

                // ID / PW 찾는 sql 구문
                string sFindUserSQL = " SELECT USERNAME,PW";
                sFindUserSQL       += "   FROM TB_USER";
                sFindUserSQL       += $" WHERE USERID = '{sLogInID}'";
                //sFindUserSQL       += $"   AND PW = '{sPassWord}'"; 

                // SqlDataAdapter : 데이터베이스에 연결 후 SELECT SQL 구문 전달. 결과값 리턴받는 클래스
                SqlDataAdapter Adapter = new SqlDataAdapter(sFindUserSQL, Connect);
                // DataTable : 프로그래밍 언어에서 데이터를 DB 의 테이블 형태로 관리하는 데이터 자료 구조 클래스
                // DQL 서버로 SQL 문 전달 후 결과를 DataTable 에 담기
                DataTable dtTemp = new DataTable();
                Adapter.Fill(dtTemp);

                // ID 와 PW 가 일치하지 않을 경우 (dtTemp 에 데이터가 한 건도 없을 경우)
                // return;
                if (dtTemp.Rows.Count == 0)
                {
                    MessageBox.Show("로그인 ID 가 잘못되었습니다.");
                    txtID.Text = "";
                    txtID.Focus();
                    ++iCount;
                    CheckThreeFail();
                    return;
                }
                // dtTemp 테이블에 받아온 데이터 중 PassWord 정보를 변수에 담는다.
                else if (sPassWord != Convert.ToString(dtTemp.Rows[0]["PW"]))
                {
                    MessageBox.Show("PW 가 일치하지 않습니다.");
                    txtPW.Text = "";
                    txtPW.Focus();
                    ++iCount;
                    CheckThreeFail();
                    return;
                }
                // ID 와 PW 가 일치할 경우 log in

                // 공통 변수에 값 대입
                Commons.sLogInUserID = sLogInID;
                Commons.sLogInUserName = Convert.ToString(dtTemp.Rows[0]["USERNAME"]);

                MessageBox.Show($"{Commons.sLogInUserName} 님 반갑습니다.");

                this.Close();
            }
            catch (Exception ex)
            {

            }
            finally
            {
                Connect.Close();
            }
        }
        private void CheckThreeFail()
        {
            if (iCount == 3)
            {
                MessageBox.Show("해킹이 감지되었습니다.");
                this.Close();
            }
        }

        private void btnPWChange_Click(object sender, EventArgs e)
        {
            M02_PassWordChange M02 = new M02_PassWordChange();
            this.Visible = false; // 로그인 화면을 숨기기
            M02.ShowDialog();
            this.Visible = true;
        }
    }
}

M02_PassWordChange.cs

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
// SQL SERVER 접속 클래스 라이브러리
using System.Data.SqlClient;

namespace MainForms
{
    public partial class M02_PassWordChange : Form
    {
        private SqlConnection Connect;           // 데이터베이스 접속 정보 관리 클래스
        private SqlTransaction Tran;             // 데이터베이스 데이터 관리 권한 부여 클래스
        private SqlCommand Cmd = new SqlCommand(); // 데이터베이스 트랜잭션 명령 전달 클래스
        public M02_PassWordChange()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            // 비밀번호 변경 클릭
            DoChangePassWord();

        }
        private void DoChangePassWord()
        {
            // 기본값 입력 여부 확인
            string sMessage = string.Empty;
            if (txtUserID.Text == "")
            {
                sMessage = "사용자 ID";
            }
            else if (txtOldPW.Text == "")
            {
                sMessage = "이전 비밀번호";
            }
            else if (txtNewPW.Text == "")
            {
                sMessage = "신규 비밀번호";
            }
            if (sMessage != "")
            {
                MessageBox.Show(sMessage + "를 입력하지 않았습니다.");
                return;
            }

            // 비밀번호 변경을 위한 로직 시작

            // 데이터베이스 접속 경로 설정
            string sConnect = Commons.sConnectInfo;

            // 접속 경로 커넥터 객체에 전달
            Connect = new SqlConnection(sConnect);

            // 데이터베이스 연결 상태 확인
            Connect.Open();
            if (Connect.State != ConnectionState.Open)
            {
                MessageBox.Show("데이터베이스 접속에 실패하였습니다.");
                return;
            }

            string sLogInID = txtUserID.Text;    // 사용자 ID
            string sOldPassWord = txtOldPW.Text; // 이전 비밀번호
            string sNewPassWord = txtNewPW.Text; // 신규 비밀번호

            string sFindUserInfo = string.Empty;
            sFindUserInfo = "  SELECT PW                       ";
            sFindUserInfo += "   FROM TB_USER                  ";
            sFindUserInfo += $" WHERE USERID = '{sLogInID}'    ";
            sFindUserInfo += $"   AND PW     = '{sOldPassWord}'";

            SqlDataAdapter Adapter = new SqlDataAdapter(sFindUserInfo, Connect);
            DataTable dtTemp = new DataTable();
            Adapter.Fill(dtTemp);

            // ID 와 PW 동시에 일치 여부 확인
            if (dtTemp.Rows.Count == 0)
            {
                // ID 와 PW 가 일치하는 데이터가 없다.
                MessageBox.Show("ID 또는 비밀번호가 일치하지 않습니다.");
                txtUserID.Text = "";
                txtOldPW.Text  = "";
                txtNewPW.Text  = "";
                txtUserID.Focus();
                return;
            }

            // ID 와 비밀번호가 동일할 경우 비밀번호 변경 여부
            // 메세지 및 결과에 따른 진행여부 결정
            if (MessageBox.Show("해당 비밀번호를 변경하시겠습니까?", "비밀번호 변경", MessageBoxButtons.YesNo) == DialogResult.No)
            {
                return;
            }

            // 트랜잭션 선언
            Tran = Connect.BeginTransaction("MyTran");

            // 데이터 베이스 트랜잭션 명령 전달 클래스 객체에 설정한 트랜잭션 등록
            Cmd.Transaction = Tran;   // 생성한 트랜잭션 등록
            Cmd.Connection = Connect; // 접속 정보 등록
            // 트랜잭션 SQL 구문 등록
            string sUpdateSql = " UPDATE TB_USER ";
            sUpdateSql       += $"   SET PW     = '{sNewPassWord}'";
            sUpdateSql       += $" WHERE USERID = '{sLogInID}'";
            Cmd.CommandText = sUpdateSql;

            // SQL 문 실행
            Cmd.ExecuteNonQuery();

            // 정상 완료 시 commit
            Tran.Commit();
            MessageBox.Show("비밀번호가 정상적으로 변경되었습니다.");
        }
    }
}
LIST