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
를 사용했으니, 동일한 테스트를 진행하고 싶은 사람들은 아래의 링크를 참고하도록 하자.
[MySQL] MySQL 샘플 데이터베이스, 공식 다운로드 및 적용하는 방법
0. 목적 MySQL 연습을 위해, MySQL 에서 공식적으로 제공하는 샘플 데이터베이스를 다운로드 받는 방법을 알아본다. 동시에, 내려받은 샘플 데이터베이스를 GUI 환경인 MySQL Workbench를 이용해 MySQL에
acredev.tistory.com
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 연결이 정상적으로 완료되었는지 또한 확인할 수 있었다.