본문 바로가기
인생은 실전/C#

[C#] SQL Server - ① : MS-SQL 연결하기 / 어플리케이션 구성 파일(App.config) 사용해서 DB 연결 문자열 가져오기

by 나는영하 2022. 8. 12.

 SQL Server - ① : MS-SQL 연결(연동) 하기

많은 DB 종류중에 Microsoft사의 DB 프로그램인 MS-SQL과 연결해서

프로시저를 사용해 테이블을 조회하고 관련 데이터를 추출하는 부분을 정리해볼 예정입니다.

아마 3~4개의 글로 나누어서 정리가 될거 같은데 번째 글은 SQL Server와 연결하는 부분입니다 .

✔ SQL Server = MS-SQL  입니다. 용어가 혼합되서 나올수도 있으나 혼동하지 마세요!! 

 

Visual Studio에서 프로젝트를 생성하면 생기는 어플리케이션 구성 파일(App.config)을 사용해서

DB 연결 문자열을 가져오고, 이 문자열을 바탕으로 MS-SQL에 연결하는 과정까지 정리해보도록 하겠습니다.😄

 

앞으로 SQL Server와 관련된 모든 코드는 Nuget 패키지에서 "Microsoft.Data.SqlClient"를 사용해서 작성하도록 하겠습니다. (버전 : 5.0.0 / 게시일 : 2022.08.06)

Microsoft.Data.SqlClient 패키지

 

※ 해당 어셈블리에는 많은 네임스페이스가 존재하지만 본문에서는 대부분 "Sql.Client"만 사용합니다.
(보통 우리가 상단에 using로 추가하는것은 어셈블리 단위가 아니라 네임스페이스 단위로 합니다.)
SqlClient의 namespace 들

 

 1. 어플리케이션 구성 파일(App.config)을 사용해서 연결 문자열 가져오기

① App.config 안에 DB 연결 문자열 입력 

<?xml version="1.0" encoding="utf-8"?>
<configuration>
	<!-- MsSql DB 연결 관련 -->
	<connectionStrings>
		<add name="MSSQL" connectionString="server=127.0.0.1,1433; user id=sa; pwd=1; database=Practice_Yhyou_DB;Encrypt=True;TrustServerCertificate=True;"/>
	</connectionStrings>
</configuration>

App.config 안에 연결 문자열을 읽어올라면 반드시 <connectionStrings></connectionStrings> 안에다 입력해야합니다. 만약 임의로 사용자가 네이밍을 한다면 오류가 발생합니다.

 

✔ <DbConnectionStrings> </DbConnectionStrings> 라는 네이밍을 했을때 발생하는 오류 

ConfigurationErrorsException 오류


② System.Configuration.ConfigurationManager

클라이언트 애플리케이션의 구성파일에 액세스 할 수 있도록 해줍니다. 

// 네임스페이스 등록
using System.Configuration;

// App.config의 연결 문자열을 읽어오는 부분
ConnectionString = ConfigurationManager.ConnectionStrings["MSSQL"].ConnectionString;

App.config에 있는 DB관련 문자열이 추출되었다.

App.config안에 "MSSQL"이라는 name을 가진 connectionString의 값이 추출된것을 알 수 있습니다. 

db 관련 연결 문자열을 string 타입의 변수에 저장해두고 아래에서 db에 연결할때 유용하게 사용하도록 하겠습니다.👍


ConnectionStrings vs AppSettings 속성 비교 

ConfigurationManager 클래스를 통해 App.config의 값을 추출하기 위한 속성은 2가지가 있습니다. 

여기서 AppSettings는 App.config 안에 <appSettings> </appSettings>의 데이터를 추출할 수 있으며 

ConnectionStrings은 <connectionStrings> </connectionStrings> 안의 데이터만 추출할 수 있습니다. 

 

각각의 구성과 형태가 어떻게 생겼는지는 아래의 Sample을 통해 확인하겠습니다 :)

<?xml version="1.0" encoding="utf-8" ?>  
<configuration>  
  <appSettings>  
    <add key="Setting1" value="May 5, 2014"/>  
    <add key="Setting2" value="May 6, 2014"/>  
  </appSettings>    
  <connectionStrings>  
    <add name="WingtipToys" connectionString="Data Source=(LocalDB)\v11.0;Initial Catalog=WingtipToys;Integrated Security=True;Pooling=False" />  
   </connectionStrings>  
</configuration>

 

 

 2. Microsoft.Data.SqlClient 패키지 사용해서 MS-SQL 연결하기

① SqlConnection.Open() 으로 SQL Server와 접속

위의 과정을 통해 App.config에 있는 db 연결 문자열을 불러와서 string 타입의 변수에 저장하였습니다.

이를 SqlConnection 클래스의 인자로 사용하여 생성자를 만들고, DB와 연결하였습니다. 

ConnectionString = ConfigurationManager.ConnectionStrings["MSSQL"].ConnectionString;
conn = new SqlConnection(ConnectionString);
conn.Open();

연결되었다는 Message도 확인할 수 있음


② SqlConnection.State를 통해 SQL Server와 접속 되었는지 확인 

정상적으로 DB와 연결되었다면 State의 값이 Open이 들어오는것을 확인 할 수 있습니다. 

이점을 이용해서 if문을 통해 DB와 연결되었는지 확인하고 연결이 안되었다면 return을 통해 다시 연결과정을 반복하도록 하였습니다. 

 

 

코드 전문

더보기
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 Microsoft.Data.SqlClient;
using System.Configuration;

namespace DbTableCreate
{
    public partial class Form1 : Form, IDisposable
    {
        private SqlConnection conn;
        private string ConnectionString;

        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            // DB 연결자 리딩 및 연결
            ConnectionString = ConfigurationManager.ConnectionStrings["MSSQL"].ConnectionString;
            conn = new SqlConnection(ConnectionString);
            try
            {
                conn.Open();
                if (conn.State == ConnectionState.Closed) return;
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
         }
    }
}

댓글