C#

[C#] MSSQL DB에 접속 및 쿼리문 사용.

C#Developer 2021. 7. 31. 17:19

안녕하세요. 회원여러분. 오늘은 C#으로 여러 데이터베이스(이하 DB) 플랫폼 중 MSSQL를 접속하여 
데이터 조회/등록/수정/삭제까지 해보겠습니다.

아래의 내용이 너무 길다면 포스팅하단에 샘플프로그램이 있으니 참고하셔도 됩니다.

먼저 DB를 접속하려면 기본적으로 5가지 정보가 필요합니다.
   ● 서버 IP
   ● 서버 포트
   ● DB명
   ● DB 접속 ID
   ● DB 접속 비밀번호

위 정보를 수집하였다면 C#으로 접속을 시도해 보겠습니다.

C#에서 DB접속시 필수 클래스 3가지를 먼저 공부하겠습니다.

 

SqlConnection 클래스 
  MSSQL DB의 접속을 담당하는 클래스입니다. 
   
SqlCommand 클래스 
  MSSQL DB에 쿼리문을 전달하는 클래스입니다. 
  
SqlDataAdapter 클래스 
  MSSQL DB에서 반환된 데이터를 DataSet클래스로 변환해 주는 클래스입니다. 
   

DB 접속

위 클래스는 모두 System.Data.SqlClient 네임스페이스로 이루어져 있습니다. 
따라서 using System.Data.SqlClient를 선언해 주어야 합니다.

using System.Data.SqlClient;

	private SqlConnection _sqlConnection;
	private SqlCommand _sqlCommand;
	
	private void MssqlOpen()
	{
		try
		{
			_sqlConnection = new SqlConnection();
			_sqlConnection.ConnectionString = string.Format("Data Source={0},{1} ;" +
															"Initial Catalog={2};" +
															"Persist Security Info=True;" +
															"User ID={3};" +
															"Password={4}", txtIP.Text       
																		, txtPort.Text       
																		, txtDatabase.Text   
																		, txtID.Text         
																		, txtPassword.Text); 

			if (_sqlConnection.State 
			== System.Data.ConnectionState.Closed)
			{
				_sqlConnection.Open();

				lblConnResult.Text = "접속 완료!";
			}
		}
		catch
		{
			lblConnResult.Text = "접속 실패!";
		}
	}

 

MssqlOpen()함수에서 SqlConnection클래스에 서버 IP, 서버 포트, DB명, DB 접속 ID, DB 접속 비밀번호를
입력한 후 SqlConnection.Open()함수로 MSSQL DB접속을 시도합니다.
여기서 SqlConnection.State는 현재 응용프로그램에서 MSSQL DB접속상태를 확인할 수 있으며,
위 코드는 현재 응용프로그램의 MSSQL DB접속이 되어 있지 않으면 접속하도록 되었습니다.

 

DB 접속 종료

MSSQL DB에 접속하였다면 접속종료도 해야겠죠?

        private void MssqlClose()
        {
            try
            {
                if (_sqlConnection.State == ConnectionState.Open)
                {
                    _sqlConnection.Close();
                    _sqlConnection.Dispose();
                    _sqlConnection = null;

                    lblConnResult.Text = "접속 종료!";
                }

            }
            catch
            {
                lblConnResult.Text = "접속 종료 실패!";
            }
        }

 

위 MssqlClose()함수를 통해 현재 응용프로그램의 MSSQL DB접속되어 있다면 접속종료합니다.

이렇게 MSSQL DB접속 및 종료, 접속상태에 대해 알아봤으니, 
쿼리문으로 데이터를 조회/등록/수정/삭제해 보도록 하겠습니다.
공통적으로 SqlCommand / SqlDataAdapter 클래스가 사용되며, 상황에 따라
SqlDataAdapter 클래스는 사용되지 않을 수 있습니다.

 

데이터 조회(SELECT문)

        public DataSet ExcuteQeuryDataSet(string Sql)
        {
            try
            {
                //MSSQL 접속.
                MssqlOpen();

                DataSet dataSet = new DataSet();

                _sqlCommand = new SqlCommand(Sql, _sqlConnection);
                _sqlCommand.CommandType = CommandType.Text;

                SqlDataAdapter sqlDataAdapter = new SqlDataAdapter(_sqlCommand);
                sqlDataAdapter.Fill(dataSet);

                MssqlClose();

                return dataSet;
            }
            catch 
            {
                return null;
            }
        }

 

  위 함수을 보시면 앞전 MssqlOpen()함수를 통해 MSSQL DB에 접속하고, 
  SqlCommand클래스에 쿼리문과 ConnectionState클래스 MSSQL DB 접속상태를 선언합니다.
  ConnectionState클래스의 MSSQL DB에 쿼리문이 전달됩니다.
  
  SELECT문은 반환값이 존재함으로 DataSet클래스를 선언하고, 
  SqlDataAdapter클래스의 sqlDataAdapter.Fill() 사용하여 DataSet클래스에 반환된 데이터를
  초기화합니다.

DataSet에 반환된 데이터

 

데이터 등록/수정/삭제(INSERT / UPDATE / DELETE문)

        public void ExcuteNonQeury(string Sql)
        {

            int result = 0;

            try
            {
                //MSSQL 접속.
                MssqlOpen();

                _sqlCommand = new SqlCommand(Sql, _sqlConnection);
                _sqlCommand.CommandType = CommandType.Text;

                result = _sqlCommand.ExecuteNonQuery();

                MssqlClose();
            }
            catch
            {
            }
        }

  SELECT문은 MSSQL DB 반환값을 받기 위해 SqlDataAdapter클래스를 사용하였다면
  INSERT / UPDATE / DELETE문은 반환값이 없기 때문에 SqlDataAdapter클래스를 사용하지 않습니다.
  
  MssqlOpen()함수를 통해 MSSQL DB에 접속하고, 
  SqlCommand클래스에 쿼리문과 ConnectionState클래스 MSSQL DB 접속상태를 선언합니다.
  ConnectionState클래스의 MSSQL DB에 쿼리문이 전달됩니다.
  
  SqlCommand.ExecuteNonQuery()를 통해 등록/수정/삭제되는 행의 수를 가져옵니다.
  


데이터의 조회, 등록/수정/삭제 관련 함수를 따로 정리하였지만 등록/수정/삭제를 하더라도
데이터 조회 소스를 사용하여도 무관합니다. 
다만 데이터의 조회시 등록/수정/삭제 소스를 사용한다면 반환값을 받지 못합니다. 
참고로 알아 두시면 좋겠네요.

이렇게 MSSQL DB 접속 및 쿼리문 전달까지 알아봤습니다.

MsSqlSample.zip
0.39MB


위 내용의 샘플소스같이 올려드리니 참고하시기 바랍니다.

이상 사이버지식정보방이었습니다.