Web Programming/ASP .Net Core 3

ASP .Net Core 3.1 - MySQL 사용

안녕하세요 씨앤텍 시스템즈 최홍준 연구원입니다.

이번 포스트는 ASP. Net Core 3.1 버전 MVC패턴에서

MySQL 연동 및 간단한 코딩입니다.

아래와 같은 개발 준비사항이 필요합니다.

MySQL은 Window도 가능하고 Linux에 있는 MariaDB, MySQL도 가능합니다.


1. DB : MariaDB Server

2. Platform : Visual Studio 2019

3. Project Type : ASP .Net Core 3.1 MVC Project


 


[ 1. Visual Studio MySQL Nuget Package ]

1. MySQL (MariaDB) .Net Core 모듈 다운로드

- Visual Studio 상단 툴바에서 다음과 같은 순서로 클릭합니다.

[ 도구(T) - NuGet 패키지 관리자(N) - 솔루션용 NuGet 패키지 관리... ]

그림1. Project에 NuGet 패키지 관리

 

다음 사진 처럼 상단에 찾아보기에서 ySql.Data Package를 설치합니다.

[ 찾아보기 - MySql.Data 입력 - MySql.Data 클릭 - 오른쪽 프로젝트 왼쪽에 체크박스 활성화 - 아래쪽 설치버튼 클릭 ]

그림2. MySql.Data NuGet Package 설치

 

설치 버튼을 누르시면 라이선스 승인 동의여부 창이 나오는데 동의함 누르고 설치 진행합니다.

그림3. MySql.Data 라이선스 승인 동의

 

설치 완료후 NuGet 솔루션에서 설치됨으로 들어가 MySql.Data가 아래 사진과 같이 나오면 설치가 끝났습니다.

그림4. MySql.Data 설치 완료


[2. Visual Studio에 DB 정보 설정]

1. appsettings.json 수정

- ASP .Net Core MVC Project에 appsettings.json 파일에 아래와 같은 코드와 같이 작성합니다.

< AllowedHosts 아래에 추가했습니다. >

그림5. ASP .Net Core MVC appsettings.json

{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft": "Warning",
      "Microsoft.Hosting.Lifetime": "Information"
    }
  },
  "AllowedHosts": "*",
  "ConnectionStrings": {
    "DefaultConnection": "server=MySQL 아이피; port=MySQL 포트; database= DataBase 이름; user=MySQL ID; password=MySQL Password"
  }
}

[3. DB Service 만들기]

- DB Service는 DB에 대한 SQL문이 실행되는 부분이다.

DB Service는 Model에 추가하는 사람도 있고 아래와 같은 방법으로 따로 클래스를 만들어 사용하는 사람들도 있습니다.

저희는 클래스를 따로 만들어서 사용해 보도록 하겠습니다. 아래와 같이 클래스를 생성합니다.

[ 프로젝트에서 마우스 오른쪽 클릭 - 추가(D) - 클래스(C)... ]

그림6. 프로젝트 DB Service 클래스 파일 생성1
그림7. 프로젝트 DB Service 클래스 파일 생성2
그림8. 프로젝트 DB Service 클래스 파일 생성 완료


[4. DB Service 환경설정]

Test.cs 파일에 DB Service에 필요한 설정을 셋팅해주겠습니다.

Test.cs파일에 아래와 같은 코드를 작성합니다.

using MySql.Data.MySqlClient;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;

namespace WebApplication5
{
    public class Test
    {
        public string ConnectionString { get; set; }

        public Test(string connectionString)
        {
            this.ConnectionString = connectionString;
        }

        private MySqlConnection GetConnection()
        {
            return new MySqlConnection(ConnectionString);
        }
    }
}

 

그리고 Startup.cs에 ConfigureServices 부분에 환경설정 코드를 추가해줍니다.

        public void ConfigureServices(IServiceCollection services)
        {
            services.Add(new ServiceDescriptor(typeof(Test), new Test(Configuration.GetConnectionString("DefaultConnection"))));

            services.AddControllersWithViews();
        }

[5. DB Model 만들기]

- DB Service를 수행한 결과 값을 List형태로 저장하는데 해당 타입은 Table 객체로 만들어야합니다. 그렇기 때문에 Models 폴더에 Table 객체를 하나 만들어 줍니다.

 

그림9. Model Table Model 객체 만들기1
그림10. Model Table Model 객체 만들기2
그림11. Model Table Model 객체 만들기3

Test용 DB는 아래 사진과 같이 구성했습니다.

< id = INT , Name = VARCHAR, Age = INT, Phone = VARCHAR, Email = VARCHAR >

그림12. MySQL DB 테이블 구성

이러한 Table 구성을 가지고 Model에서도 위와 똑같은 구성으로 만들어줍니다.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;

namespace WebApplication5.Models
{
    public class Data
    {
        private Test context;

        public int id { get; set; }

        public string Name { get; set; }

        public int Age { get; set; }

        public string Phone { get; set; }

        public string Email { get; set; }
    }
}

private Test context는 DB Service에 context를 의미합니다.


[4. DB Service 구현]

- 실제로 DB에 행동을 취하는 SELECT / INSERT / DELETE 구현합니다.

 

1. SELECT 구현 - SQL문을 작성하실때 마지막에는 띄어쓰기를 꼭 써줘야합니다!!!

        public List<Data> GetData()
        {
            List<Data> list = new List<Data>();
            string SQL = "SELECT * FROM Person ";
            using (MySqlConnection conn = GetConnection())
            {
                conn.Open();
                MySqlCommand cmd = new MySqlCommand(SQL, conn);

                using(var reader = cmd.ExecuteReader())
                {
                    while (reader.Read())
                    {
                        list.Add(new Data()
                        {
                            id = Convert.ToInt32(reader["id"]),
                            Name = reader["Name"].ToString(),
                            Age = Convert.ToInt32(reader["Age"]),
                            Phone = reader["Phone"].ToString(),
                            Email = reader["Email"].ToString()
                        });
                    }
                }
            }
            conn.Close();
            return list;
        }

위 코드와 작성하면 Test 데이터베이스에 Person 테이블을 전체 조회하는 코드입니다. 조회한 결과는 list에 저장하는데 그 형태는 저희가 만든 Data Model에 만들어줌 변수에 저장하는 형태입니다. 값이 여러개라면 list가 늘어납니다.

 

2. INSERT 구현

        public void InsertData()
        {
            string SQL = "INSERT INTO Person(Name,Age,Phone,Email) VALUES('Choi',22,'010-3333-4444','choi@choi.com')";
            using (MySqlConnection conn = GetConnection())
            {
                try
                {
                    conn.Open();
                    MySqlCommand cmd = new MySqlCommand(SQL, conn);

                    if (cmd.ExecuteNonQuery() == 1)
                    {
                        Console.WriteLine("Insert Success!!");
                    }
                    else
                    {
                        Console.WriteLine("Insert Fail!!");
                    }
                }
                catch (Exception e)
                {
                    Console.WriteLine("DB Connection Faill!!!!!!");
                    Console.WriteLine(e.ToString());
                }
                conn.Close();
            }
        }

 

3. DELETE 구현

        public void DeleteData()
        {
            string SQL = "Delete FROM Person WHERE name='choi' ";
            using (MySqlConnection conn = GetConnection())
            {
                try
                {
                    conn.Open();
                    MySqlCommand cmd = new MySqlCommand(SQL, conn);

                    if (cmd.ExecuteNonQuery() == 1)
                    {
                        Console.WriteLine("Delete Success!!");
                    }
                    else
                    {
                        Console.WriteLine("Delete Fail!!");
                    }
                }
                catch (Exception e)
                {
                    Console.WriteLine("DB Connection Faill!!!!!!");
                    Console.WriteLine(e.ToString());
                }
                conn.Close();
            }
        }

[5. DB Service 실행]

- DB Service를 실행하기 위해 View와 Controller를 만들어 줍니다.

그림13. View 만들기1
그림14. View 만들기2
그림15. View 만들기3
그림16. View Page

View Page를 제어할 Controller를 만들어보겠습니다.

그림17. Controller 만들기1
그림18. Controller 만들기2

 

그림19. Controller 만들기3
그림20. Test Controller

Test Controller에서 DB Service에서 실행한 결과를 View에 전달하는 코드를 작성합니다.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using WebApplication5.Models;

namespace WebApplication5.Controllers
{
    public class TestController : Controller
    {
        public IActionResult Index()
        {
            Test context = HttpContext.RequestServices.GetService(typeof(Test)) as Test;
            List<Data> list = context.GetData();
            return View(list);
        }
    }
}

 

그리고 View Page에 아래와 같이 코드 작성을 합니다.

@using WebApplication5.Models
@model IEnumerable<Data>

@{
    ViewData["Title"] = "Index";
}

<h2>MySQL SELECT 결과</h2>
<ul>
    @foreach (var data in Model)
    {
        <li>ID : @data.id < 이름: @data.Name,  나이:  @data.Age, 휴대폰: @data.Phone, 이메일: @data.Email  > </li>
    }
</ul>
<hr />

 작성이 끝났다면 실행을하여 확인을 해봅니다.

그림21. SELECT 결과 확인


이러한 방법으로 ASP .Net Core 3.1 MVC에서 MySQL과 연동 후 쿼리 결과를 확인해 보았습니다.

감사합니다.

728x90

'Web Programming > ASP .Net Core 3' 카테고리의 다른 글

SignalR  (0) 2021.03.16
ASP.Net Core 3.1 과 Nginx 연동  (0) 2020.11.18
ASP .Net Core 3.1 Apache 연동  (0) 2020.08.18
ASP .Net Core 3.1 - Razor  (0) 2020.04.23
ASP .Net Core 3 - MVC  (0) 2020.04.06