본문 바로가기

C# .Net

C# DB Table을 불러와 Gridview에 출력(DataGridveiw에 DataTable Binding)

private void GridViewTable(MySqlConnection conn, string tablename) // 선택한 Table을 listview에 출력
        {
            try
            {
                int k;
                int i;
                
                string strqry = $"SELECT * FROM {tablename};";
                int Colum_length = GetColumn_length(conn, tablename);

                DataTable dataTable = new DataTable();
                DataColumn dataColumn = new DataColumn();

                dataTable.Clear();
                dataGridView1.DataSource = null;
                dataTable.Columns.Clear();

                // 선택한 Table에 Column을 dataTable에 추가
                for (k = 0; k < Colum_length; k++)
                {
                    dataTable.Columns.Add(GetColumn_names(conn, tablename)[k]); 
                }

                MySqlCommand cmd = new MySqlCommand(strqry, conn);
                cmd.CommandType = CommandType.Text;
                MySqlDataAdapter adapt = new MySqlDataAdapter(strqry, conn);
                adapt.Fill(dataTable);

                dataGridView1.DataSource = dataTable; // Gridview Datatable 바인딩
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString(), ex.Message);
            }
        }

 

Gridview에 DataTable 바인딩 코드

 

using MySql.Data.MySqlClient;
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Diagnostics;
using System.Reflection;
using System.Windows.Forms;


namespace Hydro.TCP_GW
{
    
    public partial class DB_Connector : Form
    {
        public DB_Connector(string[] args)
        {
            string[] args_;
            args_ = args;
            InitializeComponent();
        }


        public void DB_Connector_Load(object sender, EventArgs e)
        {
            
        }

        public MySqlConnection Connect_info() // DB 연결 정보 및 DB연결 객체 반환
        {
            string Server_adress = Server_adress_text.Text;
            string Port = Port_text.Text;
            string DB = DB_text.Text;
            string UID = UID_text.Text;
            string PWD = PWD_text.Text;

            string strConn = $"Server={Server_adress}; Port={Port}; Database={DB}; Uid={UID}; Pwd={PWD};";
            MySqlConnection conn = new MySqlConnection(strConn);

            return conn;
        }

        private void Connect_Click(object sender, EventArgs e) 
        {
            MySqlConnection conn = Connect_info();

            ConnectCheck(conn); // 연결 확인
            Gettable(conn);
        }

        private void Select_table_Click(object sender, EventArgs e)
        {
            MySqlConnection conn = Connect_info();
            conn.Open();

            string Selected_table = "";
            Selected_table = Table_list.SelectedItem.ToString();

            GridViewTable(conn, Selected_table); // Combobox에서 선택한 테이블을 listview 출력 
            conn.Close();
        }

        private int GetColumn_length(MySqlConnection conn, string tablename) // 조회할 Table에 Column 총 개수를 반환
        {
            string column_list_strqry = $"SELECT COUNT(*) FROM information_schema.columns WHERE table_name='{tablename}';";

            MySqlCommand colum_list = new MySqlCommand(column_list_strqry, conn);
            colum_list.CommandType = CommandType.Text;
            MySqlDataReader C = colum_list.ExecuteReader();
            int colum_count = 0;
            while (C.Read())
            {
                colum_count += C.GetInt32(0);
            }
            C.Close();
            return colum_count;
        }

        private List<string> GetColumn_names(MySqlConnection conn, string tablename) // 조회할 Table에 Column 이름들을 List형으로 반환
        {
            string column_list_strqry = $"SELECT column_name from information_schema.columns WHERE table_name='{tablename}';";

            MySqlCommand colum_list = new MySqlCommand(column_list_strqry, conn);
            colum_list.CommandType = CommandType.Text;
            MySqlDataReader C = colum_list.ExecuteReader();
            List<string> column_names = new List<string>();
            while (C.Read())
            {
                column_names.Add(C.GetString(0));
            }
            C.Close();
            return column_names;
        }

        private void Gettable(MySqlConnection conn) // 접속한 DB에 Table 이름들을 Combobox에 추가
        {
            string table_list_strqry = "SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = '';";

            MySqlCommand table_names = new MySqlCommand(table_list_strqry, conn);
            table_names.CommandType = CommandType.Text;
            MySqlDataReader C = table_names.ExecuteReader();

            List<string> table_list = new List<string>();
            while (C.Read())
            {
                table_list.Add(C.GetString(0));
            }
            C.Close();

            Table_list.Items.AddRange(table_list.ToArray());
        }

        private void GridViewTable(MySqlConnection conn, string tablename) // 선택한 Table을 listview에 출력
        {
            try
            {
                int k;
                int i;
                
                string strqry = $"SELECT * FROM {tablename};";
                int Colum_length = GetColumn_length(conn, tablename);

                DataTable dataTable = new DataTable();
                DataColumn dataColumn = new DataColumn();

                dataTable.Clear();
                dataGridView1.DataSource = null;
                dataTable.Columns.Clear();

                // 선택한 Table에 Column을 dataTable에 추가
                for (k = 0; k < Colum_length; k++)
                {
                    dataTable.Columns.Add(GetColumn_names(conn, tablename)[k]); 
                }

                MySqlCommand cmd = new MySqlCommand(strqry, conn);
                cmd.CommandType = CommandType.Text;
                MySqlDataAdapter adapt = new MySqlDataAdapter(strqry, conn);
                adapt.Fill(dataTable);

                dataGridView1.DataSource = dataTable; // Gridview Datatable 바인딩
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString(), ex.Message);
            }
        }
                
        private void ConnectCheck(MySqlConnection conn) // 연결 확인
        {
            try
            {
                conn.Open();
                MessageBox.Show("Database에 성공적으로 연결하였습니다.", "연결");
            }
            catch (Exception ex)
            {
                conn.Close();
                MessageBox.Show(ex.ToString());

                Application.OpenForms["DB_Connector"].Close();
            }
        }

    }
}

전체 코드

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

[C#] Selenium을 이용한 대신증권 기사 크롤링  (0) 2021.02.15