ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • C# DB연동
    C# 2020. 6. 18. 15:14

    비주얼 스튜디오 

    참조 -> NuGet -> Metro UI 다운

    using MetroFramework.Forms;
    
    namespace BookRentalShop20
    {
        public partial class Form1 : MetroForm
        {
            public Form1()
            {
                InitializeComponent();
            }
    

     

    메트로 폼 적용

     

    폼 설정

    Single Document Interface (SDI) Multi  (MDI)로 하면 여러창을 관리.

     

    MDI 로 바꾸려면

    메인폼

    using MetroFramework;
    using MetroFramework.Forms;
    using System.Windows.Forms;
    
    namespace BookRentalShop20
    {
        public partial class MainForm : MetroForm
        {
            public MainForm()
            {
                InitializeComponent();
            }
    
            private void MainForm_Load(object sender, System.EventArgs e)
            {
                LoginForm loginForm = new LoginForm();
                loginForm.ShowDialog();
                this.WindowState = FormWindowState.Maximized;
            }
    
            private void MainForm_FormClosing(object sender, FormClosingEventArgs e)
            {
                try
                {
                    if (MetroMessageBox.Show(this, "정말 종료하시겠습니까", "종료",
                    MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
                    {//메세지 박스의 Yes No 버튼에 따른 조건문
                        foreach (var item in this.MdiChildren)
                        {
                            item.Close();
                        }
                        e.Cancel = false;
    
                    }
                    else
                    { //이것만 있으면 아무리 x버튼 눌러도 종료가 안된다.
                        e.Cancel = true;
                    }
                }
                catch
                { 
                }
                
            }
    
            private void MnuItemDivMng_Click(object sender, System.EventArgs e)
            {
                DivForm form = new DivForm();
                form.Text = "구분 코드 관리";
                form.Dock = DockStyle.Fill; //회색 화면을 꽉채운다.
                form.MdiParent = this; //메인폼에서 child로 띄우는 거니까 부모를 해줘야한다.
                //multi document interface 
                //this 는 자식의 위치에서 부모가 
                form.Show();
                form.WindowState = FormWindowState.Maximized;
            }
    
            private void 사용자관리UToolStripMenuItem_Click(object sender, System.EventArgs e)
            {
                UserForm form = new UserForm();
                form.Text = "사용자 관리";
                form.Dock = DockStyle.Fill; //회색 화면을 꽉채운다.
                form.MdiParent = this; //메인폼에서 child로 띄우는 거니까 부모를 해줘야한다.
                //multi document interface 
                //this 는 자식의 위치에서 부모가 
                form.Show();
                form.WindowState = FormWindowState.Maximized;
    
            }
        }
    }
    

     

     

    user폼

    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=127.0.0.1;Initial Catalog=bookrentalshopDB;Persist Security Info=True;User ID=sa;Password=p@ssw0rd!";
            string mode = "";
    
            public object DeleteProcess { get; private set; }
    
            public UserForm()
            {
                InitializeComponent();
            }
    
            private void DivForm_Load(object sender, EventArgs e)
            { //직접 코딩해서 DB를 로드한다.
                UpdateData();//데이터 그리드 DB 데이터 로딩하기
    
            }
    
            //사용자 데이터 가져요기
            private void UpdateData()
            {
                using (SqlConnection conn = new SqlConnection(strConnString))
                {
                    conn.Open(); //DB접속
                    //쿼리 직접 치기 귀찮으니 ssms 가서 테이블우클릭 -> 새쿼리편집창해서 편집한 후 가지고온다.
    
                    //마우스 클릭으로 하던걸 코딩으로 한다.
                    //제일 중요하다.
                    string strQuery = "SELECT id,userID,password,lastLoginDt,loginIpAddr FROM dbo.userTbl";
                    SqlCommand cmd = new SqlCommand(strQuery, conn);
                    SqlDataAdapter dataAdapter = new SqlDataAdapter(strQuery, conn);
                    //위에는 연결선 같은 역할을 한다.
                    //밑에 이걸로 데이터를 담는 통
                    DataSet ds = new DataSet();
                    dataAdapter.Fill(ds, "userTbl"); //통에다가 divtbl을 이름으로 채운다.
    
                    GrdUserTbl.DataSource = ds; //그리드의 데이터 소스에다가 붓는다.
                    GrdUserTbl.DataMember = "userTbl";
                }
    
                DataGridViewColumn column = GrdUserTbl.Columns[0]; //id 컬럼
                column.Width = 40;
                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 = "접속아이피주소";
    
            }
    
            private void label4_Click(object sender, EventArgs e)
            {
    
            }
    
            private void GrdDivTbl_CellClick(object sender, DataGridViewCellEventArgs e)
            {
    
            }
    
            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();
                UpdateData();//이미 수정함
                //값이 바로 바꾼것으로 보이기 위한 부분.
                ClearTextControls();
            }
    
            private void ClearTextControls()
            {
                
                TxtId.Text = TxtUserID.Text = TxtPassword.Text = "";
                
                TxtUserID.Focus();
            }
    
            //db저장 프로세스
            private void SaveProcess()
            {
                if (string.IsNullOrEmpty(mode))
                {
                    MetroMessageBox.Show(this, "신규버튼을 누르고 데이터를 저장하십시오", "경고", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                }
                using (SqlConnection conn = new SqlConnection(strConnString))
                {
                    conn.Open();
                    SqlCommand cmd = new SqlCommand();
                    cmd.Connection = conn;
    
                    if (mode == "UPDATE")
                    {
                        cmd.CommandText = " UPDATE dbo.userTbl " + 
                                          " SET userID = @UserID,password = @Password " +
                                          " WHERE Id = @Id ";
                        SqlParameter parmUserID = new SqlParameter("@UserID", SqlDbType.VarChar, 12);
                        parmUserID.Value = TxtUserID.Text;
                        cmd.Parameters.Add(parmUserID); //아이디 업데이트!
    
    
                        SqlParameter parmPassword = new SqlParameter("@Password", SqlDbType.VarChar, 20);
                        parmPassword.Value = TxtPassword.Text;
                        cmd.Parameters.Add(parmPassword);//비밀번호 업데이트!
    
                        
                        SqlParameter parmID = new SqlParameter("@Id", SqlDbType.Int);
                        parmID.Value = TxtId.Text;
                        cmd.Parameters.Add(parmID);//순번 업데이트!
    
                        cmd.ExecuteNonQuery();//excute는 넣을 때 쓰는건 NonQuery 그 외에건 가져올 때
                        UpdateData();
    
                    }
                    else if (mode == "INSERT")
                    {
                        cmd.CommandText = "INSERT INTO dbo.userTbl (userID, password) VALUES (@UserID, @Password)";
                        SqlParameter parmUserID = new SqlParameter("@UserID", SqlDbType.VarChar, 12);
                        parmUserID.Value = TxtUserID.Text;
                        cmd.Parameters.Add(parmUserID); //아이디 업데이트!
    
    
                        SqlParameter parmPassword = new SqlParameter("@Password", SqlDbType.VarChar, 20);
                        parmPassword.Value = TxtPassword.Text;
                        cmd.Parameters.Add(parmPassword);//비밀번호 업데이트!
    
                        cmd.ExecuteNonQuery();//excute는 넣을 때 쓰는건 NonQuery 그 외에건 가져올 때
                        UpdateData();
    
                    }
    
                }
            }
    
            private void txtNames_KeyPress(object sender, KeyPressEventArgs e)
            {
                if(e.KeyChar==13)
                {
                    BtnSave_Click(sender, new EventArgs());
                    //txtNames_Keypress에서 엔터치면 바로 저장
                }
            }
    
            private void BtnDelete_Click(object sender, EventArgs e)
            {
    
            }
    
            private void DeleteProcess2()
            {
                using(SqlConnection conn = new SqlConnection(strConnString))
                {
                    conn.Open();
                    SqlCommand cmd = new SqlCommand();
                    cmd.Connection = conn;
    
                    cmd.CommandText = " DELETE FROM dbo.divtbl WHERE Division = @Division ";
                    SqlParameter parmDivision = new SqlParameter("@Division", SqlDbType.Char, 4);
                    parmDivision.Value = TxtUserID.Text;
                    cmd.Parameters.Add(parmDivision);
    
                    cmd.ExecuteNonQuery();
                    UpdateData();
                    ClearTextControls();
                }
            }
        }
    }
    

     

    Div 폼

    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=127.0.0.1;Initial Catalog=bookrentalshopDB;Persist Security Info=True;User ID=sa;Password=p@ssw0rd!";
            string mode = "";
    
            public object DeleteProcess { get; private set; }
    
            public DivForm()
            {
                InitializeComponent();
            }
    
            private void DivForm_Load(object sender, EventArgs e)
            { //직접 코딩해서 DB를 로드한다.
                UpdateData();//데이터 그리드 DB 데이터 로딩하기
    
            }
    
            private void UpdateData()
            {
                using (SqlConnection conn = new SqlConnection(strConnString))
                {
                    conn.Open(); //DB접속
                    //쿼리 직접 치기 귀찮으니 ssms 가서 테이블우클릭 -> 새쿼리편집창해서 편집한 후 가지고온다.
    
                    //마우스 클릭으로 하던걸 코딩으로 한다.
                    //제일 중요하다.
                    string strQuery = "SELECT Division,Names FROM divtbl";
                    //SqlCommand cmd = new SqlCommand(strQuery, conn);
                    SqlDataAdapter dataAdapter = new SqlDataAdapter(strQuery, conn);
                    //위에는 연결선 같은 역할을 한다.
                    //밑에 이걸로 데이터를 담는 통
                    DataSet ds = new DataSet();
                    dataAdapter.Fill(ds, "divtbl"); //통에다가 divtbl을 이름으로 채운다.
    
                    GrdDivTbl.DataSource = ds; //그리드의 데이터 소스에다가 붓는다.
                    GrdDivTbl.DataMember = "divtbl";
                }
            }
    
            private void label4_Click(object sender, EventArgs e)
            {
    
            }
    
            private void GrdDivTbl_CellClick(object sender, DataGridViewCellEventArgs e)
            {
                if (e.RowIndex>-1)
                {//그리드 뷰의 한 행을 클릭하면 텍스트에 디비전과 네임이 나온다.
                    DataGridViewRow data = GrdDivTbl.Rows[e.RowIndex]; //그리드의 인덱스에 대한 값 저장
                    //배열의 행들 : DataGridViewRowCollection
                    //배열의 한 행 : DataGridViewRow
    
                    txtDivision.Text = data.Cells[0].Value.ToString();
                    txtNames.Text=data.Cells[1].Value.ToString();
    
                    txtDivision.BackColor = Color.Beige; //텍스트를 노란색으로 하여 수정이 불가하게 설정
                    txtDivision.ReadOnly = true;
                    mode = "UPDATE";
                }
            }
    
            private void BtnNew_Click(object sender, EventArgs e)
            {
                ClearTextControls();
                mode = "INSERT"; //신규 INSERT
            }
    
            private void BtnSave_Click(object sender, EventArgs e)
            {
                if (string.IsNullOrEmpty(txtDivision.Text)||string.IsNullOrEmpty(txtNames.Text))
                {
                    MetroMessageBox.Show(this, "빈 값은 저장할 수 없습니다.", "경고", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    return; //메세지 박스 빠져 나오기 뭐 안되면 리턴하자
                }
    
                SaveProcess();
                UpdateData();//데이터 그리드 DB 데이터 로딩하기
                //값이 바로 바꾼것으로 보이기 위한 부분.
                ClearTextControls();
            }
    
            private void ClearTextControls()
            {
                txtDivision.Text = txtNames.Text = "";
                txtDivision.ReadOnly = false;
                txtDivision.BackColor = Color.White;
                txtDivision.Focus();
            }
    
            //db저장 프로세스
            private void SaveProcess()
            {
                if (string.IsNullOrEmpty(mode))
                {
                    MetroMessageBox.Show(this, "신규버튼을 누르고 데이터를 저장하십시오", "경고", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                }
                using (SqlConnection conn = new SqlConnection(strConnString))
                {
                    conn.Open();
                    SqlCommand cmd = new SqlCommand();
                    cmd.Connection = conn;
    
                    if (mode == "UPDATE")
                    {
                        cmd.CommandText = "UPDATE dbo.divtbl  " +
                                   "   SET Names = @Names  " +
                                   " WHERE Division = @Division  ";
                        SqlParameter parmNames = new SqlParameter("@Names", SqlDbType.NVarChar, 45);
                        parmNames.Value = txtNames.Text;
                        cmd.Parameters.Add(parmNames); //이름 업데이트!
    
    
                        SqlParameter parmDivision = new SqlParameter("@Division", SqlDbType.Char, 4);
                        parmDivision.Value = txtDivision.Text;
                        cmd.Parameters.Add(parmDivision);//디비전 업데이트!
    
                        cmd.ExecuteNonQuery();//excute는 넣을 때 쓰는건 NonQuery 그 외에건 가져올 때
                        UpdateData();
                    }
                    else if (mode == "INSERT")
                    {
                        cmd.CommandText = "INSERT INTO dbo.divtbl(Division,Names)" +
                                          "VALUES(@Division, @Names)";
                        SqlParameter parmNames = new SqlParameter("@Names", SqlDbType.NVarChar, 45);
                        parmNames.Value = txtNames.Text;
                        cmd.Parameters.Add(parmNames);//이름 업데이트!
    
                        SqlParameter parmDivision = new SqlParameter("@Division", SqlDbType.Char, 4);
                        parmDivision.Value = txtDivision.Text;
                        cmd.Parameters.Add(parmDivision);//디비전 업데이트!
    
                        cmd.ExecuteNonQuery();//excute는 넣을 때 쓰는건 NonQuery 그 외에건 가져올 때
                        UpdateData();
    
                    }
    
                }
            }
    
            private void txtNames_KeyPress(object sender, KeyPressEventArgs e)
            {
                if(e.KeyChar==13)
                {
                    BtnSave_Click(sender, new EventArgs());
                    //txtNames_Keypress에서 엔터치면 바로 저장
                }
            }
    
            private void BtnDelete_Click(object sender, EventArgs e)
            {
                if (string.IsNullOrEmpty(txtDivision.Text) || string.IsNullOrEmpty(txtNames.Text))
                {
                    MetroMessageBox.Show(this, "빈 값은 삭제할 수 없습니다.", "경고", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    return; //메세지 박스 빠져 나오기 뭐 안되면 리턴하자
                }
                DeleteProcess2();
    
            }
    
            private void DeleteProcess2()
            {
                using(SqlConnection conn = new SqlConnection(strConnString))
                {
                    conn.Open();
                    SqlCommand cmd = new SqlCommand();
                    cmd.Connection = conn;
    
                    cmd.CommandText = " DELETE FROM dbo.divtbl WHERE Division = @Division ";
                    SqlParameter parmDivision = new SqlParameter("@Division", SqlDbType.Char, 4);
                    parmDivision.Value = txtDivision.Text;
                    cmd.Parameters.Add(parmDivision);
    
                    cmd.ExecuteNonQuery();
                    UpdateData();
                    ClearTextControls();
                }
            }
        }
    }
    

     

    'C#' 카테고리의 다른 글

    C# 윈폼 타이머를 이용한 스탑워치  (0) 2020.08.20
    C# 기초 정리  (0) 2020.06.25
    C# 윈폼 Chart 컨트롤  (0) 2020.06.18
    C# 고급 컨트롤  (0) 2020.06.17
    C# 고급폼 (2020.06.16)  (0) 2020.06.16
Designed by Tistory.