본문 바로가기

카테고리 없음

SMART FACTORY - DB연결 계속

반응형
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)
        {

        }
    }
}

conn.Open();

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;
            }
            
        }
    }
}

반응형