IT/C#

C# - Dapper로 MS-SQL DB 처리하기

!? 2022. 2. 14.

 

Dapper는 Microsoft .NET 플랫폼용 개체 관계형 매핑 제품이라고 하는데,  

CRUD를 편하고, 쉽게 처리할 수 있습니다.

먼저 Dapper를 사용할려면 다운로드를 해야겠죠.

Visual Studio를 열어서 test 프로젝트를 생성하여, Nuget에서 Dapper를 검색하여 설치해줍니다.

(test 프로젝트로 윈폼 프로젝트를 생성하였습니다.)

 

 

 

 

 

1. 설치

 - 설치가 완료되면, 참조에 Dapper가 추가된 걸 확인하실 수 있습니다.

2. DB Connection 정보 입력

 - DB 접속정보를 프로젝트의 설정에 사용할 이름과 접속할 정보를 값에 입력해준다.

3. DB connection

 - 프로젝트의 설정에서 입력한 DB정보를 sqlconnection에 매핑

        private IDbConnection OpenConnection()
        {
            SqlConnection conn = new SqlConnection(Properties.Settings.Default.ConnDbString);
            try
            {
                conn.Open();
                return conn;
            }
            catch (System.Exception ex)
            {
                MessageBox.Show(ex.ToString());
                return conn;
            }
        }

 

 

 

4. DB select/insert/update

 - 테스트로 tb_user테이블을 만들어 select/insert/update/dynamic(개체(TB_USER)없이 동적으로 처리)

// select
var query = "select user_id, user_name from TB_USER_INFO where user_id=@user_id";

using (var db = OpenConnection())
{
    var result = db.Query<TB_USER>(query, new { user_id = textBox1.Text }).FirstOrDefault();
    label1.Text = result.user_id;
}

// insert
var query = "insert into TB_USER_INFO (user_id, user_name) values (@user_id, @user_name)";

using (var db = OpenConnection())
{
    var result = db.Execute(query, new { user_id = textBox1.Text, user_name = textBox2.Text });
}

// update    
var query = "update TB_USER_INFO set user_name=@user_name where user_id=@user_id";

using (var db = OpenConnection())
{
    var result = db.Execute(query, new { user_id = textBox1.Text, user_name = textBox2.Text });
}

// dynamic 
var query = "select user_id, user_name from tb_user where user_id=@user_id";

using (var db = OpenConnection())
{
    dynamic result = db.Query<dynamic>(query, new { user_id = textBox1.Text }).FirstOrDefault();
    label1.Text = result.user_id;
}

 

5. 전체 source

   1. Form을 하나 만들어서 아이디/사용자명을 입력할  textbox 생성

   2. buttton을 추가하여 select/insert/update 이벤트 추가

   3. 결과값을 label에 view

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;
using Dapper;

namespace testApp
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private IDbConnection OpenConnection()
        {
            SqlConnection conn = new SqlConnection(Properties.Settings.Default.ConnDbString);
            try
            {
                conn.Open();
                return conn;
            }
            catch (System.Exception ex)
            {
                MessageBox.Show(ex.ToString());
                return conn;
            }
        }

        private void button2_Click(object sender, EventArgs e)
        {
            var query = "select user_id, user_name from tb_user where user_id=@user_id";

            using (var db = OpenConnection())
            {
                var result = db.Query<TB_USER>(query, new { user_id = textBox1.Text }).FirstOrDefault();
                label1.Text = result.user_id;
            }
        }

        private void button3_Click(object sender, EventArgs e)
        {
            var query = "insert into tb_user (user_id, user_name) values (@user_id, @user_name)";

            using (var db = OpenConnection())
            {
                var result = db.Execute(query, new { user_id = textBox1.Text, user_name = textBox2.Text });
            }
        }

        private void button4_Click(object sender, EventArgs e)
        {
            var query = "update tb_user set user_name=@user_name where user_id=@user_id";

            using (var db = OpenConnection())
            {
                var result = db.Execute(query, new { user_id = textBox1.Text, user_name = textBox2.Text });
            }
        }

        private void button5_Click(object sender, EventArgs e)
        {
            var query = "select user_id, user_name from tb_user where user_id=@user_id";

            using (var db = OpenConnection())
            {
                dynamic result = db.Query<dynamic>(query, new { user_id = textBox1.Text }).FirstOrDefault();
                label1.Text = result.user_id;
            }
        }
    }

    public class TB_USER
    {
        public string user_id { get; set; }
        public string user_name { get; set; }
    }
}

 

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

C# - 특정 Control 찾아서 초기화  (0) 2023.08.18
C# - ClickOnce 버전 보이기  (0) 2022.02.18
C# - [winform] MDI프로젝트에서 로그인폼 만들기  (0) 2022.02.10
C# - log4net 적용하기  (0) 2022.02.08
C# - [Winform] 중복실행 방지  (0) 2022.02.07

댓글