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