[C#] 라이브러리 생성

728x90

솔루션 탐색기에서 우클릭 → 추가 → 새 프로젝트를 클릭합니다.

 

클래스 라이브러리(.NET Framework)를 선택하고 다음버튼을 클릭합니다.

 

 

라이브러리 이름을 작성하고 만들기버튼을 클릭합니다.

 

먼저 데이터베이스 조회, 삭제, 수정, 삽입에 대한 라이브러리를 만들어보겠습니다.

 

using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ClassLibrary1
{
    public class Class1
    {
        private SqlConnection conn = null;
        private string connStr = "";

        public void setConnStr(string str)
        {
            connStr = str;
        }

        //조회, 삭제 수정
        public DataSet requestExcuteNonQuery(string query)
        {
            DataSet ds = new DataSet();

            //조회 부분
            if (query.Trim(' ').Substring(0, 3).Equals("sel"))
            {

                using (SqlConnection conn = new SqlConnection(connStr))
                {

                    //conn.Open();

                    SqlDataAdapter adapter = new SqlDataAdapter(query, conn);

                    adapter.Fill(ds);

                }
                return ds;
            }
            //수정, 삭제, 삽입 -> 리턴타입이 없음
            else
            {
                using (SqlConnection conn = new SqlConnection(connStr))
                {
                    conn.Open();

                    SqlCommand command = new SqlCommand();
                    command.Connection = conn;
                    command.CommandText = query;
                    command.ExecuteNonQuery();

                    
                }

                return null;
            }
        }
        /// <summary>
        /// 프로시저 호출함수(공통)
        /// </summary>
        /// <param name="procedureName"></param>
        /// <param name="dc"></param>
        public void requestProcedure(string procedureName,Dictionary<string,string> dc)
        {
            using (SqlConnection conn = new SqlConnection(connStr))
            {
                conn.Open();
                SqlCommand command = new SqlCommand(procedureName, conn);//매개변수로는 프로시저이름, sqlconnection 객체명이 들어간다.
                command.CommandType = CommandType.StoredProcedure;

                //Dictionary 사용

                foreach(var a in dc)
                {
                    SqlParameter parameter = new SqlParameter(a.Key, SqlDbType.VarChar); // 프로시저의 파라미터 이름, DB타입
                    parameter.Direction = ParameterDirection.Input;// 저장 프로시저에 들어가는 값 -> 입력값이 들어간다.
                    parameter.Value = a.Value;
                    command.Parameters.Add(parameter);
                    Console.WriteLine("key:" + a.Key + ",value:" + a.Value);
                }
               

                command.ExecuteNonQuery();
                Console.WriteLine("프로시저 호출 : insertBOOKS");

                
            }
        }
    }
}

 

 

만든 라이브러리를 사용하려면 참조 추가를 해야합니다.

 

솔루션 탐색기 → 참조 우클릭 → 참조 추가버튼을 클릭합니다.

 

프로젝트 -> 본인이 만든 라이브러리를 체크하고 확인버튼을 클릭합니다.

 

솔루션 탐색기에 올라온 것을 확인할 수 있습니다.

 

만약에 참조에 나타나지 않는다면 Ctrl+ Shift + B를 눌러 빌드를 합니다.

 

라이브러리를 사용해서 쿼리문을 불러오기 위해 Form1.cs 코드를 수정합니다.

using ClassLibrary1;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Configuration;
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 book
{
    public partial class Form1 : Form
    {
        private Class1 cls1 = new Class1(); //클래스 라이브러리의 Class1 클래스를 불러온다.

        private SqlConnection conn = null;
        private string connStr = "SERVER=" + ConfigurationManager.AppSettings["IP"] + "," + ConfigurationManager.AppSettings["PORT"] + ";DATABASE="
            + ConfigurationManager.AppSettings["DBNAME"] + ";UID=" + ConfigurationManager.AppSettings["UID"] + ";PASSWORD=" + ConfigurationManager.AppSettings["PWD"] + ";";

        public Form1()
        {
            InitializeComponent();
        }

        /// <summary>
        /// 데이터 베이스 연결
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button1_Click(object sender, EventArgs e)
        {
            try
            {
                conn = new SqlConnection(connStr);

                conn.Open();
                //MessageBox.Show("데이터베이스 연결 성공");
                Console.WriteLine("데이터베이스 연결 성공");
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
                Console.WriteLine("데이터베이스 연결 실패"+ex.Message);
            }
        }

        /// <summary>
        /// 데이터베이스 연결 해제
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button2_Click(object sender, EventArgs e)
        {
            try
            {
                //null이 아니라면 버튼1 클릭이 실행된 것을 의미 -> 데이터베이스 연결됨
                if (conn != null)
                {
                    //데이터 베이스 연결 끊기
                    conn.Close();
                    MessageBox.Show("데이터 베이스 연결 해제");
                    Console.WriteLine("데이터 베이스 연결 해제");
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
                Console.WriteLine("오류 발생"+ex.Message);
            }

        }

        /// <summary>
        /// 데이터 전체 조회
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button6_Click(object sender, EventArgs e)
        {

           DataSet ds = new DataSet();

            ds = cls1.requestExcuteNonQuery("select * from BOOKS(NOLOCK)");
        
            
            dataGridView1.DataSource = ds.Tables[0];
        }

        private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            textBox1.Text = dataGridView1.Rows[e.RowIndex].Cells["BOOKNO"].Value.ToString(); //dataGridView1의 행에서 cell이름(데이터 베이스 컬럼명)이 BOOKNO인 값을 가져온다.
            textBox2.Text = dataGridView1.Rows[e.RowIndex].Cells["NAME"].Value.ToString();
            textBox4.Text = dataGridView1.Rows[e.RowIndex].Cells["BOOKNO"].Value.ToString();
        }

        private void button3_Click(object sender, EventArgs e)
        {
            string bookNo = textBox1.Text;
            cls1.requestExcuteNonQuery("delete from BOOKS where BOOKNO=" + bookNo);

            button6_Click(null, null);



        }

        private void button4_Click(object sender, EventArgs e)
        {
            string bookNo = textBox4.Text;
            string bookName = textBox3.Text;
                        
            cls1.requestExcuteNonQuery("update BOOKS set NAME='" + bookName + "' where BOOKNO=" + bookNo);

            button6_Click(null, null);
        }

        private void button5_Click(object sender, EventArgs e)
        {
            string bookNo = textBox6.Text;
            string bookName = textBox5.Text;
            string bookCode = textBox7.Text;



            //프로시저 호출할 때 Dictionary를 사용

            Dictionary<string,string> dc = new Dictionary<string,string>(); //C#에서 Dictionary는 자바의 Hashmap과 유사함 -> generic 부분은 key,value //파라미터가 유동적이기 때문에 Dictionary를 사용

            dc.Add("@BOOKNO", bookNo);
            dc.Add("@BOOKNAME", bookName);
            dc.Add("@BOOKCODE", bookCode);

            cls1.requestProcedure("insertBOOKS", dc);

            button6_Click(null, null);
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            cls1.setConnStr("SERVER=" + ConfigurationManager.AppSettings["IP"] + "," + ConfigurationManager.AppSettings["PORT"] + ";DATABASE="
            + ConfigurationManager.AppSettings["DBNAME"] + ";UID=" + ConfigurationManager.AppSettings["UID"] + ";PASSWORD=" + ConfigurationManager.AppSettings["PWD"] + ";");
        }
    }
}

 

코드가 훨씬 간단해지는 것을 볼 수 있습니다.

 

 

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

[C#] 저장 프로시저 호출  (0) 2024.05.15
[C#] 디버깅 하는방법  (0) 2024.05.15
[C#] Timer  (0) 2024.05.15
[C#] 이벤트 게시 및 수신  (0) 2024.05.15
[C#] 비동기 프로그래밍  (0) 2024.05.15