0. 목적
C# 프로젝트에서 MySQL DB를 사용하기 위해, 참조를 추가하는 방법에 대해 알아보자. Visual Studio에서 제공하는 NuGet Package 설치 마법사를 이용해, 손쉽게 해결해 보자.
1. 참고
본 포스트에서는 Windows 10 Pro 운영체제를 구동하는 컴퓨터에서 Visual Studio 2022 IDE를 사용했으며, MySQL Workbench 8.0.31 환경에서 진행되었다. 또한, 본 포스트에서 연결 테스트에 사용된 SCHEMAS
는 MySQL에서 기본 제공되는 world SCHEMAS
를 사용했으니, 동일한 테스트를 진행하고 싶은 사람들은 아래의 링크를 참고하도록 하자.
2. NuGet 패키지 설치
상단 메뉴바의 프로젝트
→ NuGet 패키지 관리
버튼을 클릭한다.
찾아보기
버튼을 클릭하고, mysql
을 검색한다. MySql.Data
항목이 표시되면, 우측의 설치
버튼을 클릭해 NuGet 패키지를 설치한다.
라이선스 승인 화면이 출력되면, 동의함
버튼을 클릭 후 넘어가면 된다.
설치가 완료되면, 솔루션 탐색기
트리 메뉴의 참조
항목에 MySql.Data dll
파일이 정상적으로 참조되어 있는 모습을 확인할 수 있다. 신규 프로젝트 생성 시마다 위 절차를 밟아주면 된다.
3. MySQL 연결 테스트
Visual Studio에서 C# 콘솔 앱 프로젝트를 하나 생성한다.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using MySql.Data.MySqlClient; // MySQL 참조
코드 최상단에, MySQL 명령어를 사용하기 위한MySql.Data.MySqlClient;
참조문을 using
해준다.
namespace mysql_connect_test
{
class Program
{
static void Main(string[] args)
{
try
{
// MySQL 연결 명령어
MySqlConnection connection = new MySqlConnection("Server=localhost;Database=world;Uid=root;Pwd=root");
// MySQL 서버 연결 유지
connection.Open();
// MySQL로 보낼 문자열 Query 변수 선언
string Query = "SELECT * FROM world.city WHERE name = 'kabul';";
// MySqlCommand 클래스를 사용해 쿼리문을 MySQL로 전송
MySqlCommand command = new MySqlCommand(Query, connection);
// MySqlDataReader 클래스와 ExecuteReader() 함수를 이용해,
// 받아온 정보를 reader에 저장
MySqlDataReader reader = command.ExecuteReader();
while (reader.Read())
{
// 받아온 reader의 정보 중, name 열만 출력
Console.WriteLine((string)reader["name"]);
}
// MySQL 서버 연결 종료
connection.Close();
}
catch (Exception ex)
{ Console.WriteLine(ex.Message.ToString()); }
}
}
}
namespace 내부에, 간단한 코드를 작성해서 MySQL 연결이 정상적으로 이루어졌는지 테스트를 해 보자. 본 코드는 world
SCHEMAS
의 city
테이블에 위치한 Name
이 Kabul
인 데이터 중, Name
데이터만 Console
창에 출력하는 코드이다.
필자의 경우 MySQL 데이터베이스 연결 아이디와 비밀번호가 모두 root
로 동일하기 때문에 "Uid=root, Pwd=root"
로 지정했는데, 필자와 다른 경우 해당 부분만 수정해서 활용하면 된다.
C#에서 사용되는 MySQL의 연결 명령어 구조는?
▣ MySqlConnection
MySqlConnection
은 MySQL 연결을 위한 클래스이다.new
연산자를 통해 객체를 하나 생성해서 사용한다. 상기 코드에서는connection
이름의 객체를 생성해서 사용했다."
"
큰 따옴표로 감싸진 명령어에는Server
,Database
,Uid
,Pwd
등이 삽입되는데,Server
에는 서버 주소,Database
에는 사용할 DBSCHEMAS
명칭,Uid
에는 DB 연결 아이디,Pwd
에는 DB 연결 비밀번호를 입력하면 된다.
▣ 객체명.Open();
MySqlConnection
클래스를 사용하기 위해connection
객체를 앞서 생성했었다. 상기 코드에서는 따라서connection.Open();
명령어를 사용했다.
본 명령어는 MySQL 서버와 본 프로그램 간의 서버 연결을 유지하기 위한 명령어이다.
▣ 객체명.Close();
본 명령어는 MySQL 서버와 본 프로그램 간의 서버 연결을 종료하기 위한 명령어이다.
MySQL에 쿼리문을 모두 보내서 레코드 (row) 들을 받아왔으면 연결을 종료하기 위함인데, 굳이 해당 명령어를 사용해야 하나? 에 대한 의견은 아직까지 분분하다.
하지만, 내 경험상 WinForm 프로젝트 제작 시 MySQL 에서 받아온 레코드 (row
) 정보들을 예외처리 하기 위해서는 본 명령어를 사용해야 좀 더 편했던 경험이 있었고, 굳이 MySQL 사용이 종료되었는데도 연결을 유지하며 리소스를 낭비하고 있을 필요는 없으니 사용하는 것을 추천한다. 게다가 코드도 짧은데, 안 쓸 이유는 없다고 본다.
▣ MySqlCommand
MySqlCommand
는 MySQL에 쿼리문을 넘기기 위해 사용하는 클래스이다.new
연산자를 통해 객체를 하나 생성해서 사용한다. 상기 코드에서는command
이름의 객체를 생성해서 사용했다.(
)
사이에는 차례로 쿼리문과 연결 정보들이 담겨있는 객체를 삽입한다. 따라서, 상기 코드에서는 문자열 변수로 선언했던Query
변수와 앞서 생성했던connection
객체를 입력하기 위해(Query, connection)
으로 명령어를 지정했다.
▣ MySqlDataReader
MySqlCommand
는 서버와 프로그램 간의 연결이 유지되어 있는 상태에서, 쿼리문을 보내 받아온 정보들을 한 번의 한 레코드 (row
) 씩 가져오기 위한 클래스이다.
결과값을 받아오기 위해ExecuteReader()
함수를 함께 사용하며, 받아온 결과값을reader
에 저장하기 위해 상기 코드를 작성했다.
Ctrl
+ F5
버튼을 눌러 디버그 하지 않고 시작을 해 보자. world
SCEMAS
의 city
테이블에 있는 Kabul
데이터의 Name
항목만 정상적으로 불러와진 모습을 확인할 수 있다. 이로서 MySQL 연결이 정상적으로 완료되었는지 또한 확인할 수 있었다.