반응형
namespace BookRentalShop20
{
public partial class LoginForm :MetroForm
{
string strConnString = "Data Source=192.168.0.28;Initial Catalog=BookRentalshopDB;Persist Security Info=True;User ID=sa;Password=p@ssw0rd!";
public LoginForm()
{
InitializeComponent();
}
/// <summary>
/// 캔슬버튼 클릭이벤트
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void button2_Click(object sender, EventArgs e)
{
//Application.Exit(); //단점이 있다 정확하게 해제가 안되는 경우가 있다.
Environment.Exit(0); // 0 false 에러가 없다 -> 정상적인 종료 1 true 에러가 있다.
}
/// <summary>
/// 로그인 처리버튼 이벤트
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void BtnOk_Click(object sender, EventArgs e)
{
LoginProcess();
}
private void TxtUserID_KeyPress(object sender, KeyPressEventArgs e)
{
if (e.KeyChar ==13) //엔터
{
TxtPassword.Focus();
}
}
private void TxtPassword_KeyPress(object sender, KeyPressEventArgs e)
{
if(e.KeyChar == 13)
{
LoginProcess();
}
}
private void LoginProcess() //기본적이 널 값 처리
{
//throw new NotImplementedException(); //throw 예외 처리 구현이 안된 에러처리
if ((string.IsNullOrEmpty(TxtUserID.Text) ) || (string.IsNullOrEmpty(TxtPassword.Text) )) // 이즈널 오아 엠티로 간단하게 변경
{
MetroMessageBox.Show(this, "아이디/패스워드를 입력하세요!", "오류", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
string strUserId = string.Empty;
using (SqlConnection conn = new SqlConnection(strConnString)) //ip 보면 서울에 있는지 대구에 있는지 알수 있다. 접속할려면 아이디 페스워드
{
conn.Open();
SqlCommand cmd = new SqlCommand();
cmd.Connection = conn;
cmd.CommandText = "SELECT userID FROM userTBL " + //SQL 구문을 가져 와서 넣을 때는 꼭 구문 사이사이를 띄워줘야 한다.
" WHERE userID = @userID " + //SQL구문을 가져 와서 넣는다.
" AND password = @password"; //사용자가 사용 하면 바로 진행되는 !
//////////////////////////////////////////////////////////////////// ID
SqlParameter parmUserId = new SqlParameter("@userID", SqlDbType.VarChar, 12); //CommandText 를 파라미터
parmUserId.Value = TxtUserID.Text;
cmd.Parameters.Add(parmUserId);
///////////////////////////////////////////////////////////////// PASSWORD
SqlParameter parPassword = new SqlParameter("@password", SqlDbType.VarChar, 12); //CommandText 를 파라미터
parPassword.Value = TxtPassword.Text;
cmd.Parameters.Add(parPassword);
SqlDataReader reader = cmd.ExecuteReader();
reader.Read();
strUserId = reader["userID"] != null? reader["userID"].ToString() : "";
if(strUserId != "")
{
MetroMessageBox.Show(this, "접속성공", " 로그인");
this.Close();
}
else
{
MetroMessageBox.Show(this, "접속실패", " 로그인실패", MessageBoxButtons.OK,MessageBoxIcon.Warning);
}
//MetroMessageBox.Show(this, "접속성공", " 로그인");
//Debug.WriteLine("On the Debug");
}
}
namespace BookRentalShop20
{
public partial class LoginForm :MetroForm
{
string strConnString = "Data Source=192.168.0.28;Initial Catalog=BookRentalshopDB;Persist Security Info=True;User ID=sa;Password=p@ssw0rd!";
public LoginForm()
{
InitializeComponent();
}
/// <summary>
/// 캔슬버튼 클릭이벤트
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void button2_Click(object sender, EventArgs e)
{
//Application.Exit(); //단점이 있다 정확하게 해제가 안되는 경우가 있다.
Environment.Exit(0); // 0 false 에러가 없다 -> 정상적인 종료 1 true 에러가 있다.
}
/// <summary>
/// 로그인 처리버튼 이벤트
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void BtnOk_Click(object sender, EventArgs e)
{
LoginProcess();
}
private void TxtUserID_KeyPress(object sender, KeyPressEventArgs e)
{
if (e.KeyChar ==13) //엔터
{
TxtPassword.Focus();
}
}
private void TxtPassword_KeyPress(object sender, KeyPressEventArgs e)
{
if(e.KeyChar == 13)
{
LoginProcess();
}
}
private void LoginProcess() //기본적이 널 값 처리
{
//throw new NotImplementedException(); //throw 예외 처리 구현이 안된 에러처리
if ((string.IsNullOrEmpty(TxtUserID.Text) ) || (string.IsNullOrEmpty(TxtPassword.Text) )) // 이즈널 오아 엠티로 간단하게 변경
{
MetroMessageBox.Show(this, "아이디/패스워드를 입력하세요!", "오류", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
string strUserId = string.Empty;
try
{
using (SqlConnection conn = new SqlConnection(strConnString)) //ip 보면 서울에 있는지 대구에 있는지 알수 있다. 접속할려면 아이디 페스워드
{
conn.Open();
SqlCommand cmd = new SqlCommand();
cmd.Connection = conn;
cmd.CommandText = "SELECT userID FROM userTBL " + //SQL 구문을 가져 와서 넣을 때는 꼭 구문 사이사이를 띄워줘야 한다.
" WHERE userID = @userID " + //SQL구문을 가져 와서 넣는다.
" AND password = @password"; //사용자가 사용 하면 바로 진행되는 !
//////////////////////////////////////////////////////////////////// ID
SqlParameter parmUserId = new SqlParameter("@userID", SqlDbType.VarChar, 12); //CommandText 를 파라미터
parmUserId.Value = TxtUserID.Text;
cmd.Parameters.Add(parmUserId);
///////////////////////////////////////////////////////////////// PASSWORD
SqlParameter parPassword = new SqlParameter("@password", SqlDbType.VarChar, 12); //CommandText 를 파라미터
parPassword.Value = TxtPassword.Text;
cmd.Parameters.Add(parPassword);
SqlDataReader reader = cmd.ExecuteReader();
reader.Read();
strUserId = reader["userID"] != null ? reader["userID"].ToString() : ""; //여기 구문이 문제 인데 여기를 못잡겠으면
if (strUserId != "")
{
MetroMessageBox.Show(this, "접속성공", " 로그인");
this.Close();
}
else
{
MetroMessageBox.Show(this, "접속실패", " 로그인실패", MessageBoxButtons.OK, MessageBoxIcon.Warning);
}
//MetroMessageBox.Show(this, "접속성공", " 로그인");
//Debug.WriteLine("On the Debug");
}
}
catch (Exception ex)
{
MetroMessageBox.Show(this, $"Error : {ex.StackTrace}", "오류", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
}
}
}
namespace BookRentalShop20
{
public partial class MainForm : MetroForm
{
public MainForm()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
LoginForm loginForm = new LoginForm();
loginForm.ShowDialog();
}
private void MainForm_FormClosing(object sender, FormClosingEventArgs e)
{
if(MetroMessageBox.Show(this,"정말 종료하시겠습니까?","종료",MessageBoxButtons.YesNo,MessageBoxIcon.Question) == DialogResult.Yes)
{
e.Cancel = false;
}
else
{
e.Cancel = true;
}
}
}
양식 하나 추가 !!
namespace BookRentalShop20
{
public partial class MainForm : MetroForm
{
public MainForm()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
LoginForm loginForm = new LoginForm();
loginForm.ShowDialog();
}
private void MainForm_FormClosing(object sender, FormClosingEventArgs e)
{
if(MetroMessageBox.Show(this,"정말 종료하시겠습니까?","종료",MessageBoxButtons.YesNo,MessageBoxIcon.Question) == DialogResult.Yes)
{
e.Cancel = false;
}
else
{
e.Cancel = true;
}
}
private void MnuItemDivMng_Click(object sender, EventArgs e)
{
DivForm form = new DivForm();
form.Text = " 구분코드 관리";
form.Dock = DockStyle.Fill; // 화면 다채우는거
form.Show();
form.MdiParent = this; // 부모 집단이 어디냐 ? -> 여기다 (MainForm)
form.WindowState = FormWindowState.Maximized;
}
namespace BookRentalShop20
{
public partial class MainForm : MetroForm
{
public MainForm()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
LoginForm loginForm = new LoginForm();
loginForm.ShowDialog();
}
private void MainForm_FormClosing(object sender, FormClosingEventArgs e)
{
if(MetroMessageBox.Show(this,"정말 종료하시겠습니까?","종료",MessageBoxButtons.YesNo,MessageBoxIcon.Question) == DialogResult.Yes)
{
e.Cancel = false;
}
else
{
e.Cancel = true;
}
}
private void MnuItemDivMng_Click(object sender, EventArgs e)
{
DivForm form = new DivForm();
form.Text = " 구분코드 관리";
form.Dock = DockStyle.Fill; // 화면 다채우는거
form.MdiParent = this; // 부모 집단이 어디냐 ? -> 여기다 (MainForm) // Mdi 가되면 창이 밖으로 안나가게 한다 .
form.Show();
form.WindowState = FormWindowState.Maximized;
}
}
}
spillter Distance
MetroGrid -> 선택 !!!
부모 컨테이너에 도킹
네임 바꾸고 텝인덱스 바꾸고 텍스트네임 바꾸고 반복반복
연동!!!
추가사용 편집사용 삭제 사용 v 제거 !!!
접속하면 바로 확인 가능 !!!
namespace BookRentalShop20
{
public partial class DivForm : MetroForm
{
string strConnString = "Data Source=192.168.0.28;Initial Catalog=BookRentalshopDB;Persist Security Info=True;User ID=sa;Password=p@ssw0rd!";
string mode = "";
public DivForm()
{
InitializeComponent();
}
private void DivForm_Load(object sender, EventArgs e)
{
UpdateData(); // 데이터그리드DB 데이터 로딩하기
}
private void UpdateData()
{
using (SqlConnection conn = new SqlConnection(strConnString))
{
conn.Open(); // Db 열기
string strQuery
}
//throw new NotImplementedException();
}
private void GrdDivTbl_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
}
}
}
쿼리를 만들어줌
중요하다다다다다다다다다다다다다다다닫
namespace BookRentalShop20
{
public partial class DivForm : MetroForm
{
string strConnString = "Data Source=192.168.0.28;Initial Catalog=BookRentalshopDB;Persist Security Info=True;User ID=sa;Password=p@ssw0rd!";
string mode = "";
public DivForm()
{
InitializeComponent();
}
private void DivForm_Load(object sender, EventArgs e)
{
UpdateData(); // 데이터그리드DB 데이터 로딩하기
}
private void UpdateData()
{
using (SqlConnection conn = new SqlConnection(strConnString))
{
conn.Open(); // Db 열기
string strQuery = "SELECT Division, Names FROM divtbl";
SqlCommand cmd = new SqlCommand(strQuery, conn);
SqlDataAdapter dataAdapter = new SqlDataAdapter(strQuery,conn); //데이타 가져오는 플러그 !!1
DataSet ds = new DataSet();
dataAdapter.Fill(ds, "divtbl");//데이타 집합 //ds 통에다가 divtbl 이름으로 넣었다
GrdDivTbl.DataSource = ds;
GrdDivTbl.DataMember = "divtbl"; //그걸 다시 Grd 통에 넣는다 ,
}
//throw new NotImplementedException();
}
private void GrdDivTbl_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
}
}
}
namespace BookRentalShop20
{
public partial class DivForm : MetroForm
{
string strConnString = "Data Source=192.168.0.28;Initial Catalog=BookRentalshopDB;Persist Security Info=True;User ID=sa;Password=p@ssw0rd!";
string mode = "";
public DivForm()
{
InitializeComponent();
}
private void DivForm_Load(object sender, EventArgs e)
{
UpdateData(); // 데이터그리드DB 데이터 로딩하기
}
private void UpdateData()
{
using (SqlConnection conn = new SqlConnection(strConnString))
{
conn.Open(); // Db 열기
string strQuery = "SELECT Division, Names FROM divtbl";
SqlCommand cmd = new SqlCommand(strQuery, conn);
SqlDataAdapter dataAdapter = new SqlDataAdapter(strQuery,conn); //데이타 가져오는 플러그 !!1
DataSet ds = new DataSet();
dataAdapter.Fill(ds, "divtbl");//데이타 집합 //ds 통에다가 divtbl 이름으로 넣었다
GrdDivTbl.DataSource = ds;
GrdDivTbl.DataMember = "divtbl"; //그걸 다시 Grd 통에 넣는다 ,
}
//throw new NotImplementedException();
}
private void GrdDivTbl_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
}
private void GrdDivTbl_CellClick(object sender, DataGridViewCellEventArgs e) //꼭 CellClick
{
if (e.RowIndex >-1 )
{ //var data
DataGridViewRow data = GrdDivTbl.Rows[e.RowIndex];
TxtDvision.Text = data.Cells[0].Value.ToString();
TxtNames.Text = data.Cells[1].Value.ToString();
TxtDvision.ReadOnly = true; // PK 값은 수정하면 단된다. TXTDIVISION이 PK값이다.
TxtDvision.BackColor = Color.Beige;
mode = "UPDATE";
}
}
}
}
namespace BookRentalShop20
{
public partial class DivForm : MetroForm
{
string strConnString = "Data Source=192.168.0.28;Initial Catalog=BookRentalshopDB;Persist Security Info=True;User ID=sa;Password=p@ssw0rd!";
string mode = "";
public DivForm()
{
InitializeComponent();
}
private void DivForm_Load(object sender, EventArgs e)
{
UpdateData(); // 데이터그리드DB 데이터 로딩하기
}
private void UpdateData()
{
using (SqlConnection conn = new SqlConnection(strConnString))
{
conn.Open(); // Db 열기
string strQuery = "SELECT Division, Names FROM divtbl";
SqlCommand cmd = new SqlCommand(strQuery, conn);
SqlDataAdapter dataAdapter = new SqlDataAdapter(strQuery,conn); //데이타 가져오는 플러그 !!1
DataSet ds = new DataSet();
dataAdapter.Fill(ds, "divtbl");//데이타 집합 //ds 통에다가 divtbl 이름으로 넣었다
GrdDivTbl.DataSource = ds;
GrdDivTbl.DataMember = "divtbl"; //그걸 다시 Grd 통에 넣는다 ,
}
//throw new NotImplementedException();
}
private void GrdDivTbl_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
}
private void GrdDivTbl_CellClick(object sender, DataGridViewCellEventArgs e) //꼭 CellClick
{
if (e.RowIndex >-1 )
{ //var data
DataGridViewRow data = GrdDivTbl.Rows[e.RowIndex];
TxtDvision.Text = data.Cells[0].Value.ToString();
TxtNames.Text = data.Cells[1].Value.ToString();
TxtDvision.ReadOnly = true; // PK 값은 수정하면 단된다. TXTDIVISION이 PK값이다.
TxtDvision.BackColor = Color.Beige;
mode = "UPDATE"; //수정은 업데잉트
}
}
private void BtnNew_Click(object sender, EventArgs e)
{
TxtDvision.Text = TxtNames.Text = "";
TxtDvision.ReadOnly = false;
TxtDvision.BackColor = Color.White;
mode = "INSERT"; //신규는 INSERT
}
private void BtnSave_Click(object sender, EventArgs e)
{
if(String.IsNullOrEmpty(TxtDvision.Text) || String.IsNullOrEmpty(TxtNames.Text))
{
MetroMessageBox.Show(this, "빈값은 저장할 수 없습니다.", "경고", MessageBoxButtons.OK, MessageBoxIcon.Warning);
return; //이 리턴 값이 중요하다 ,@@
}
//DB저장프로세스
using (SqlConnection conn =new SqlConnection(strConnString))
{
conn.Open();
SqlCommand cmd = new SqlCommand();
cmd.Connection = conn;
String strQuery = "";
if(mode == "UPDATE")
{
strQuery = "UPDATE dbo.divtbl "+
" SET Names = @Names "+
" WHERE Division = @Division ";
cmd.CommandText = strQuery;
}
else if (mode == "INSERT")
{
throw new NotImplementedException();
}
////////////////////////////////////////////////////////////////names
SqlParameter parmNames = new SqlParameter("@Names", SqlDbType.NVarChar, 45); //CommandText 를 파라미터
parmNames.Value = TxtNames.Text;
cmd.Parameters.Add(parmNames);
///////////////////////////////////////////////////////////////// division
SqlParameter parDivision = new SqlParameter("@Division", SqlDbType.Char, 4); //CommandText 를 파라미터
parDivision.Value = TxtDvision.Text;
cmd.Parameters.Add(parDivision);
cmd.ExecuteNonQuery(); //데이터 값을 돌려 받지 않는
}
}
}
}
using MetroFramework;
using MetroFramework.Forms;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Data.SqlClient;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace BookRentalShop20
{
public partial class DivForm : MetroForm
{
string strConnString = "Data Source=192.168.0.28;Initial Catalog=BookRentalshopDB;Persist Security Info=True;User ID=sa;Password=p@ssw0rd!";
string mode = "";
public DivForm()
{
InitializeComponent();
}
private void DivForm_Load(object sender, EventArgs e)
{
UpdateData(); // 데이터그리드DB 데이터 로딩하기
}
private void UpdateData()
{
using (SqlConnection conn = new SqlConnection(strConnString))
{
conn.Open(); // Db 열기
string strQuery = "SELECT Division, Names FROM divtbl";
SqlCommand cmd = new SqlCommand(strQuery, conn);
SqlDataAdapter dataAdapter = new SqlDataAdapter(strQuery,conn); //데이타 가져오는 플러그 !!1
DataSet ds = new DataSet();
dataAdapter.Fill(ds, "divtbl");//데이타 집합 //ds 통에다가 divtbl 이름으로 넣었다
GrdDivTbl.DataSource = ds;
GrdDivTbl.DataMember = "divtbl"; //그걸 다시 Grd 통에 넣는다 ,
}
//throw new NotImplementedException();
}
private void GrdDivTbl_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
}
private void GrdDivTbl_CellClick(object sender, DataGridViewCellEventArgs e) //꼭 CellClick
{
if (e.RowIndex >-1 )
{ //var data
DataGridViewRow data = GrdDivTbl.Rows[e.RowIndex];
TxtDvision.Text = data.Cells[0].Value.ToString();
TxtNames.Text = data.Cells[1].Value.ToString();
TxtDvision.ReadOnly = true; // PK 값은 수정하면 단된다. TXTDIVISION이 PK값이다.
TxtDvision.BackColor = Color.Beige;
mode = "UPDATE"; //수정은 UPDATE
}
}
private void BtnNew_Click(object sender, EventArgs e)
{
ClearTextControls();
mode = "INSERT"; //신규는 INSERT
}
private void BtnSave_Click(object sender, EventArgs e)
{
if(String.IsNullOrEmpty(TxtDvision.Text) || String.IsNullOrEmpty(TxtNames.Text))
{
MetroMessageBox.Show(this, "빈값은 저장할 수 없습니다.", "경고", MessageBoxButtons.OK, MessageBoxIcon.Warning);
return; //이 리턴 값이 중요하다 ,@@
}
SaveProcess(); //DB저장프로세스
UpdateData();
ClearTextControls();
}
private void ClearTextControls()
{
TxtDvision.Text = TxtNames.Text = "";
TxtDvision.ReadOnly = false;
TxtDvision.BackColor = Color.White;
}
private void SaveProcess()
{
using (SqlConnection conn = new SqlConnection(strConnString))
{
conn.Open();
SqlCommand cmd = new SqlCommand();
cmd.Connection = conn;
String strQuery = "";
if (mode == "UPDATE")
{
strQuery = "UPDATE dbo.divtbl " +
" SET Names = @Names " +
" WHERE Division = @Division ";
cmd.CommandText = strQuery;
}
else if (mode == "INSERT")
{
throw new NotImplementedException();
}
////////////////////////////////////////////////////////////////names
SqlParameter parmNames = new SqlParameter("@Names", SqlDbType.NVarChar, 45); //CommandText 를 파라미터
parmNames.Value = TxtNames.Text;
cmd.Parameters.Add(parmNames);
///////////////////////////////////////////////////////////////// division
SqlParameter parDivision = new SqlParameter("@Division", SqlDbType.Char, 4); //CommandText 를 파라미터
parDivision.Value = TxtDvision.Text;
cmd.Parameters.Add(parDivision);
cmd.ExecuteNonQuery(); //데이터 값을 돌려 받지 않는
}
}
}
}
using MetroFramework;
using MetroFramework.Forms;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Data.SqlClient;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace BookRentalShop20
{
public partial class DivForm : MetroForm
{
string strConnString = "Data Source=192.168.0.28;Initial Catalog=BookRentalshopDB;Persist Security Info=True;User ID=sa;Password=p@ssw0rd!";
string mode = "";
public DivForm()
{
InitializeComponent();
}
private void DivForm_Load(object sender, EventArgs e)
{
UpdateData(); // 데이터그리드DB 데이터 로딩하기
}
private void UpdateData()
{
using (SqlConnection conn = new SqlConnection(strConnString))
{
conn.Open(); // Db 열기
string strQuery = "SELECT Division, Names FROM divtbl";
SqlCommand cmd = new SqlCommand(strQuery, conn);
SqlDataAdapter dataAdapter = new SqlDataAdapter(strQuery,conn); //데이타 가져오는 플러그 !!1
DataSet ds = new DataSet();
dataAdapter.Fill(ds, "divtbl");//데이타 집합 //ds 통에다가 divtbl 이름으로 넣었다
GrdDivTbl.DataSource = ds;
GrdDivTbl.DataMember = "divtbl"; //그걸 다시 Grd 통에 넣는다 ,
}
//throw new NotImplementedException();
}
private void GrdDivTbl_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
}
private void GrdDivTbl_CellClick(object sender, DataGridViewCellEventArgs e) //꼭 CellClick
{
if (e.RowIndex >-1 )
{ //var data
DataGridViewRow data = GrdDivTbl.Rows[e.RowIndex];
TxtDvision.Text = data.Cells[0].Value.ToString();
TxtNames.Text = data.Cells[1].Value.ToString();
TxtDvision.ReadOnly = true; // PK 값은 수정하면 단된다. TXTDIVISION이 PK값이다.
TxtDvision.BackColor = Color.Beige;
mode = "UPDATE"; //수정은 UPDATE
}
}
private void BtnNew_Click(object sender, EventArgs e)
{
ClearTextControls();
mode = "INSERT"; //신규는 INSERT
}
private void BtnSave_Click(object sender, EventArgs e)
{
if(String.IsNullOrEmpty(TxtDvision.Text) || String.IsNullOrEmpty(TxtNames.Text))
{
MetroMessageBox.Show(this, "빈값은 저장할 수 없습니다.", "경고", MessageBoxButtons.OK, MessageBoxIcon.Warning);
return; //이 리턴 값이 중요하다 ,@@
}
SaveProcess(); //DB저장프로세스
UpdateData();
ClearTextControls();
}
private void ClearTextControls()
{
TxtDvision.Text = TxtNames.Text = "";
TxtDvision.ReadOnly = false;
TxtDvision.BackColor = Color.White;
TxtDvision.Focus();
}
private void SaveProcess()
{
if (string.IsNullOrEmpty(mode))
{
MetroMessageBox.Show(this, "신규버튼을 누르고 데이터를 저장하십시오","경고",MessageBoxButtons.OK,MessageBoxIcon.Warning);
return;
}
using (SqlConnection conn = new SqlConnection(strConnString))
{
conn.Open();
SqlCommand cmd = new SqlCommand();
cmd.Connection = conn;
String strQuery = "";
if (mode == "UPDATE")
{
strQuery = "UPDATE dbo.divtbl " +
" SET Names = @Names " +
" WHERE Division = @Division ";
}
else if (mode == "INSERT")
{
strQuery = "INSERT INTO dbo.divtbl(Division,Names) " +
" VALUES(@Division, @Names) ";
cmd.CommandText = strQuery;
}
////////////////////////////////////////////////////////////////names
SqlParameter parmNames = new SqlParameter("@Names", SqlDbType.NVarChar, 45); //CommandText 를 파라미터
parmNames.Value = TxtNames.Text;
cmd.Parameters.Add(parmNames);
///////////////////////////////////////////////////////////////// division
SqlParameter parDivision = new SqlParameter("@Division", SqlDbType.Char, 4); //CommandText 를 파라미터
parDivision.Value = TxtDvision.Text;
cmd.Parameters.Add(parDivision);
cmd.ExecuteNonQuery(); //데이터 값을 돌려 받지 않는
}
}
private void TxtNames_KeyPress(object sender, KeyPressEventArgs e)
{
if(e.KeyChar == 13)
{
BtnSave_Click(sender, new EventArgs());
}
}
private void BtnDelet_Click(object sender, EventArgs e)
{
if (String.IsNullOrEmpty(TxtDvision.Text) || String.IsNullOrEmpty(TxtNames.Text))
{
MetroMessageBox.Show(this, "빈값은 삭제할 수 없습니다.", "경고", MessageBoxButtons.OK, MessageBoxIcon.Warning);
return; //이 리턴 값이 중요하다 ,@@
}
DeletProcess();
UpdateData();
ClearTextControls();
}
private void DeletProcess()
{
using (SqlConnection coon = new SqlConnection(strConnString))
{
coon.Open();
SqlCommand cmd = new SqlCommand();
cmd.Connection = coon;
cmd.CommandText = "DELETE FROM dbo.divtbl WHERE Division = @Division";
SqlParameter parameter = new SqlParameter("@Division", SqlDbType.Char, 4);
parameter.Value = TxtDvision.Text;
cmd.Parameters.Add(parameter);
}
}
}
}
UserForm
using MetroFramework;
using MetroFramework.Forms;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Data.SqlClient;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace BookRentalShop20
{
public partial class UserForm : MetroForm
{
string strConnString = "Data Source=192.168.0.28;Initial Catalog=BookRentalshopDB;Persist Security Info=True;User ID=sa;Password=p@ssw0rd!";
string mode = "";
public UserForm()
{
InitializeComponent();
}
private void DivForm_Load(object sender, EventArgs e)
{
UpdateData(); // 데이터그리드DB 데이터 로딩하기
}
/// <summary>
/// 사용자 데이터 가져오기
/// </summary>
private void UpdateData()
{
using (SqlConnection conn = new SqlConnection(strConnString))
{
conn.Open(); // Db 열기
string strQuery = "SELECT id,userID,password,lastLoginDt,loginIpAddr" +
" FROM dbo.userTbl";
SqlCommand cmd = new SqlCommand(strQuery, conn);
SqlDataAdapter dataAdapter = new SqlDataAdapter(strQuery,conn); //데이타 가져오는 플러그 !!1
DataSet ds = new DataSet();
dataAdapter.Fill(ds, "userTbl");//데이타 집합 //ds 통에다가 divtbl 이름으로 넣었다
GrdUserTbl.DataSource = ds;
GrdUserTbl.DataMember = "userTbl"; //그걸 다시 Grd 통에 넣는다 ,
}
DataGridViewColumn column = GrdUserTbl.Columns[0]; //id컬럼
column.Width = 40;
column.HeaderText = "순번";
column = GrdUserTbl.Columns[1];
column.Width = 80;
column.HeaderText = "아이디";
column = GrdUserTbl.Columns[2];
column.Width = 100;
column.HeaderText = "패스워드";
column = GrdUserTbl.Columns[3];
column.Width = 120;
column.HeaderText = "최종접속시간";
column = GrdUserTbl.Columns[4];
column.Width = 150;
column.HeaderText = "접속아이피주소";
//throw new NotImplementedException();
}
private void GrdDivTbl_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
}
/// <summary>
/// 그리드 셀클릭 이벤트
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void GrdDivTbl_CellClick(object sender, DataGridViewCellEventArgs e) //꼭 CellClick
{
if (e.RowIndex >-1 )
{ //var data
DataGridViewRow data = GrdUserTbl.Rows[e.RowIndex];
Txtid.Text = data.Cells[0].Value.ToString();
TxtUserID.Text = data.Cells[1].Value.ToString();
TxtPassword.Text = data.Cells[2].Value.ToString();
mode = "UPDATE"; //수정은 UPDATE
}
}
private void BtnNew_Click(object sender, EventArgs e)
{
ClearTextControls();
mode = "INSERT"; //신규는 INSERT
}
private void BtnSave_Click(object sender, EventArgs e)
{
if(String.IsNullOrEmpty(TxtUserID.Text) || String.IsNullOrEmpty(TxtPassword.Text))
{
MetroMessageBox.Show(this, "빈값은 저장할 수 없습니다.", "경고", MessageBoxButtons.OK, MessageBoxIcon.Warning);
return; //이 리턴 값이 중요하다 ,@@
}
SaveProcess(); //DB저장프로세스
UpdateData(); //이미수정 완료
ClearTextControls();
}
private void ClearTextControls()
{
Txtid.Text= TxtUserID.Text = TxtPassword.Text = "";
//TxtUserID.ReadOnly = false;
//TxtUserID.BackColor = Color.White;
TxtUserID.Focus();
}
private void SaveProcess()
{
if (string.IsNullOrEmpty(mode))
{
MetroMessageBox.Show(this, "신규버튼을 누르고 데이터를 저장하십시오","경고",MessageBoxButtons.OK,MessageBoxIcon.Warning);
return;
}
using (SqlConnection conn = new SqlConnection(strConnString))
{
conn.Open();
SqlCommand cmd = new SqlCommand();
cmd.Connection = conn;
String strQuery = "";
if (mode == "UPDATE")
{
strQuery = "UPDATE dbo.userTbl "+
" SET userID = @UserID "+
" , password = @Password "+
" WHERE Id = @Id ";
}
else if (mode == "INSERT")
{
strQuery = "INSERT INTO dbo.userTbl(userID,password) "+
" VALUES(@userID, @password) ";
cmd.CommandText = strQuery;
}
////////////////////////////////////////////////////////////////userid
SqlParameter parmUserID = new SqlParameter("@UserID", SqlDbType.VarChar, 12); //CommandText 를 파라미터
parmUserID.Value = TxtUserID.Text;
cmd.Parameters.Add(parmUserID);
///////////////////////////////////////////////////////////////// password
SqlParameter parmPassword = new SqlParameter("@Password", SqlDbType.VarChar, 20); //CommandText 를 파라미터
parmPassword.Value = TxtPassword.Text;
cmd.Parameters.Add(parmPassword);
///////////////////////////////////////////////////////////////// id
if (mode == "UPDATE")
{
SqlParameter parmID = new SqlParameter("@Id", SqlDbType.Int); //CommandText 를 파라미터
parmID.Value = TxtPassword.Text;
cmd.Parameters.Add(parmID);
}
cmd.ExecuteNonQuery(); //데이터 값을 돌려 받지 않는
}
}
private void BtnDelet_Click(object sender, EventArgs e)
{
/* if (String.IsNullOrEmpty(TxtUserID.Text) || String.IsNullOrEmpty(TxtPassword.Text))
{
MetroMessageBox.Show(this, "빈값은 삭제할 수 없습니다.", "경고", MessageBoxButtons.OK, MessageBoxIcon.Warning);
return; //이 리턴 값이 중요하다 ,@@
}
DeletProcess();
UpdateData();
ClearTextControls();*/
}
private void DeletProcess()
{
using (SqlConnection coon = new SqlConnection(strConnString))
{
coon.Open();
SqlCommand cmd = new SqlCommand();
cmd.Connection = coon;
cmd.CommandText = "DELETE FROM dbo.divtbl WHERE Division = @Division";
SqlParameter parameter = new SqlParameter("@Division", SqlDbType.Char, 4);
parameter.Value = TxtUserID.Text;
cmd.Parameters.Add(parameter);
cmd.ExecuteNonQuery(); // 이게 마지막으로 실행시켜주는
}
}
private void metroLabel1_Click(object sender, EventArgs e)
{
}
private void label2_Click(object sender, EventArgs e)
{
}
}
}
DivForm
using MetroFramework;
using MetroFramework.Forms;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Data.SqlClient;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace BookRentalShop20
{
public partial class DivForm : MetroForm
{
string strConnString = "Data Source=192.168.0.28;Initial Catalog=BookRentalshopDB;Persist Security Info=True;User ID=sa;Password=p@ssw0rd!";
string mode = "";
public DivForm()
{
InitializeComponent();
}
private void DivForm_Load(object sender, EventArgs e)
{
UpdateData(); // 데이터그리드DB 데이터 로딩하기
}
private void UpdateData()
{
using (SqlConnection conn = new SqlConnection(strConnString))
{
conn.Open(); // Db 열기
string strQuery = "SELECT Division, Names FROM divtbl";
SqlCommand cmd = new SqlCommand(strQuery, conn);
SqlDataAdapter dataAdapter = new SqlDataAdapter(strQuery,conn); //데이타 가져오는 플러그 !!1
DataSet ds = new DataSet();
dataAdapter.Fill(ds, "divtbl");//데이타 집합 //ds 통에다가 divtbl 이름으로 넣었다
GrdDivTbl.DataSource = ds;
GrdDivTbl.DataMember = "divtbl"; //그걸 다시 Grd 통에 넣는다 ,
}
//throw new NotImplementedException();
}
private void GrdDivTbl_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
}
private void GrdDivTbl_CellClick(object sender, DataGridViewCellEventArgs e) //꼭 CellClick
{
if (e.RowIndex >-1 )
{ //var data
DataGridViewRow data = GrdDivTbl.Rows[e.RowIndex];
TxtDvision.Text = data.Cells[0].Value.ToString();
TxtNames.Text = data.Cells[1].Value.ToString();
TxtDvision.ReadOnly = true; // PK 값은 수정하면 단된다. TXTDIVISION이 PK값이다.
TxtDvision.BackColor = Color.Beige;
mode = "UPDATE"; //수정은 UPDATE
}
}
private void BtnNew_Click(object sender, EventArgs e)
{
ClearTextControls();
mode = "INSERT"; //신규는 INSERT
}
private void BtnSave_Click(object sender, EventArgs e)
{
if(String.IsNullOrEmpty(TxtDvision.Text) || String.IsNullOrEmpty(TxtNames.Text))
{
MetroMessageBox.Show(this, "빈값은 저장할 수 없습니다.", "경고", MessageBoxButtons.OK, MessageBoxIcon.Warning);
return; //이 리턴 값이 중요하다 ,@@
}
SaveProcess(); //DB저장프로세스
UpdateData();
ClearTextControls();
}
private void ClearTextControls()
{
TxtDvision.Text = TxtNames.Text = "";
TxtDvision.ReadOnly = false;
TxtDvision.BackColor = Color.White;
TxtDvision.Focus();
}
private void SaveProcess()
{
if (string.IsNullOrEmpty(mode))
{
MetroMessageBox.Show(this, "신규버튼을 누르고 데이터를 저장하십시오","경고",MessageBoxButtons.OK,MessageBoxIcon.Warning);
return;
}
using (SqlConnection conn = new SqlConnection(strConnString))
{
conn.Open();
SqlCommand cmd = new SqlCommand();
cmd.Connection = conn;
String strQuery = "";
if (mode == "UPDATE")
{
strQuery = "UPDATE dbo.divtbl " +
" SET Names = @Names " +
" WHERE Division = @Division ";
}
else if (mode == "INSERT")
{
strQuery = "INSERT INTO dbo.divtbl(Division,Names) " +
" VALUES(@Division, @Names) ";
cmd.CommandText = strQuery;
}
////////////////////////////////////////////////////////////////names
SqlParameter parmNames = new SqlParameter("@Names", SqlDbType.NVarChar, 45); //CommandText 를 파라미터
parmNames.Value = TxtNames.Text;
cmd.Parameters.Add(parmNames);
///////////////////////////////////////////////////////////////// division
SqlParameter parDivision = new SqlParameter("@Division", SqlDbType.Char, 4); //CommandText 를 파라미터
parDivision.Value = TxtDvision.Text;
cmd.Parameters.Add(parDivision);
cmd.ExecuteNonQuery(); //데이터 값을 돌려 받지 않는
}
}
private void TxtNames_KeyPress(object sender, KeyPressEventArgs e)
{
if(e.KeyChar == 13)
{
BtnSave_Click(sender, new EventArgs());
}
}
private void BtnDelet_Click(object sender, EventArgs e)
{
if (String.IsNullOrEmpty(TxtDvision.Text) || String.IsNullOrEmpty(TxtNames.Text))
{
MetroMessageBox.Show(this, "빈값은 삭제할 수 없습니다.", "경고", MessageBoxButtons.OK, MessageBoxIcon.Warning);
return; //이 리턴 값이 중요하다 ,@@
}
DeletProcess();
UpdateData();
ClearTextControls();
}
private void DeletProcess()
{
using (SqlConnection coon = new SqlConnection(strConnString))
{
coon.Open();
SqlCommand cmd = new SqlCommand();
cmd.Connection = coon;
cmd.CommandText = "DELETE FROM dbo.divtbl WHERE Division = @Division";
SqlParameter parameter = new SqlParameter("@Division", SqlDbType.Char, 4);
parameter.Value = TxtDvision.Text;
cmd.Parameters.Add(parameter);
cmd.ExecuteNonQuery(); // 이게 마지막으로 실행시켜주는
}
}
}
}
MainForm
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;
using MetroFramework;
using MetroFramework.Forms;
namespace BookRentalShop20
{
public partial class MainForm : MetroForm
{
public MainForm()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
LoginForm loginForm = new LoginForm();
loginForm.ShowDialog();
}
/// <summary>
/// 한번에 프로그램 종료 되도록 하기
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void MainForm_FormClosing(object sender, FormClosingEventArgs e)
{
if(MetroMessageBox.Show(this,"정말 종료하시겠습니까?","종료",MessageBoxButtons.YesNo,MessageBoxIcon.Question) == DialogResult.Yes)
{
foreach (Form item in this.MdiChildren)
{
item.Close();
}
e.Cancel = false;
}
else
{
e.Cancel = true;
}
}
private void InItChildForm(Form form , string strFormTitle)
{
form.Text = strFormTitle;
form.Dock = DockStyle.Fill; // 화면 다채우는거
form.MdiParent = this; // 부모 집단이 어디냐 ? -> 여기다 (MainForm) // Mdi 가되면 창이 밖으로 안나가게 한다 .
form.Show();
form.WindowState = FormWindowState.Maximized;
}
/// <summary>
/// 코딩의 메소드화
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void MnuItemDivMng_Click(object sender, EventArgs e)
{
DivForm form = new DivForm();
InItChildForm( form, "구분코드 관리");
}
private void 사용자관리UToolStripMenuItem_Click(object sender, EventArgs e)
{
UserForm form = new UserForm();
InItChildForm( form, "사용자 관리");
}
}
}
LoginForm
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Data.SqlClient;
using System.Diagnostics;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using MetroFramework;
using MetroFramework.Forms;
namespace BookRentalShop20
{
public partial class LoginForm :MetroForm
{
string strConnString = "Data Source=192.168.0.28;Initial Catalog=BookRentalshopDB;Persist Security Info=True;User ID=sa;Password=p@ssw0rd!";
public LoginForm()
{
InitializeComponent();
}
/// <summary>
/// 캔슬버튼 클릭이벤트
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void button2_Click(object sender, EventArgs e)
{
//Application.Exit(); //단점이 있다 정확하게 해제가 안되는 경우가 있다.
Environment.Exit(0); // 0 false 에러가 없다 -> 정상적인 종료 1 true 에러가 있다.
}
/// <summary>
/// 로그인 처리버튼 이벤트
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void BtnOk_Click(object sender, EventArgs e)
{
LoginProcess();
}
private void TxtUserID_KeyPress(object sender, KeyPressEventArgs e)
{
if (e.KeyChar ==13) //엔터
{
TxtPassword.Focus();
}
}
private void TxtPassword_KeyPress(object sender, KeyPressEventArgs e)
{
if(e.KeyChar == 13)
{
LoginProcess();
}
}
private void LoginProcess() //기본적이 널 값 처리
{
//throw new NotImplementedException(); //throw 예외 처리 구현이 안된 에러처리
if ((string.IsNullOrEmpty(TxtUserID.Text) ) || (string.IsNullOrEmpty(TxtPassword.Text) )) // 이즈널 오아 엠티로 간단하게 변경
{
MetroMessageBox.Show(this, "아이디/패스워드를 입력하세요!", "오류", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
string strUserId = string.Empty;
try
{
using (SqlConnection conn = new SqlConnection(strConnString)) //ip 보면 서울에 있는지 대구에 있는지 알수 있다. 접속할려면 아이디 페스워드
{
conn.Open();
SqlCommand cmd = new SqlCommand();
cmd.Connection = conn;
cmd.CommandText = "SELECT userID FROM userTBL " + //SQL 구문을 가져 와서 넣을 때는 꼭 구문 사이사이를 띄워줘야 한다.
" WHERE userID = @userID " + //SQL구문을 가져 와서 넣는다.
" AND password = @password"; //사용자가 사용 하면 바로 진행되는 !
//////////////////////////////////////////////////////////////////// ID
SqlParameter parmUserId = new SqlParameter("@userID", SqlDbType.VarChar, 12); //CommandText 를 파라미터
parmUserId.Value = TxtUserID.Text;
cmd.Parameters.Add(parmUserId);
///////////////////////////////////////////////////////////////// PASSWORD
SqlParameter parPassword = new SqlParameter("@password", SqlDbType.VarChar, 12); //CommandText 를 파라미터
parPassword.Value = TxtPassword.Text;
cmd.Parameters.Add(parPassword);
SqlDataReader reader = cmd.ExecuteReader();
reader.Read();
strUserId = reader["userID"] != null ? reader["userID"].ToString() : ""; //여기 구문이 문제 인데 여기를 못잡겠으면
if (strUserId != "")
{
MetroMessageBox.Show(this, "접속성공", " 로그인");
this.Close();
}
else
{
MetroMessageBox.Show(this, "접속실패", " 로그인실패", MessageBoxButtons.OK, MessageBoxIcon.Warning);
}
//MetroMessageBox.Show(this, "접속성공", " 로그인");
//Debug.WriteLine("On the Debug");
}
}
catch (Exception ex)
{
MetroMessageBox.Show(this, $"Error : {ex.StackTrace}", "오류", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
}
}
}
반응형