** 준비물
- MySql (8.3)
- MySql WorkBench (8.0) -> DB 관리 툴(스키마 생성, 쿼리 작성 등..)
- Visual Studio 2022 -> .NET MAUI Blazor 프로젝트 생성
** 형상관리
- GitHub (GitHub DeskTop App 사용중입니다..)
> 소스코드 내부에 ConnectionString 문자열을 직접 작성하지 않습니다.
> GitHub Repository(리포지토리)를 Public (모두에게 공개) 으로 관리하시는 분들은
DataBase ConnectionString (데이터베이스 연결문자열)을 노출하시지 않길 권장드립니다.
> 따라서 저는 .xml 파일을 임의로 만들어서 GitHub Repository 경로가 아닌 다른 경로에 따로
파일을 두어 해당 파일의 특정 속성값을 읽어오는 방식으로 사용합니다.
** 순서
- MySql WorkBench 에서 스키마 생성
> 생성된 스키마에서 Table (테이블) 생성
> 생성된 스키마에서 Stored Procedure (저장 프로시저) 생성
- Visual Studio 에서 클래스 생성
> 생성된 클래스에서 MySqlConnection 객체 생성
* ConnectionString 을 .xml 로 관리하고, 프로그램에서 불러오는 기능 적용
> MysqlConnection 객체의 MySqlCommand 객체 생성
> MySqlCommand 속성 정의 및 실행
> 결과 반환
[Visual Studio]
* .NET MAUI Blazor 프로젝트 생성
> 솔루션에 폴더 추가 (DB)
> 클래스 추가(SqlHelper.cs)
* 거두절미 코드작성
//using MySql.Data.MySqlClient;
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Xml;
using MySqlConnector;
namespace Tomorrow.DB
{
public class SqlHelper
{
public string mySqlconnection;
public SqlHelper()
{
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load("D:\\.NET_MAUI\\Settings\\applicationSettings.xml");
#nullable disable
XmlNode xmlKeyNode = xmlDoc.SelectSingleNode("AppSettings/DBConnection/ConnectionStrings");
mySqlconnection = xmlKeyNode.Attributes["id"].Value;
}
public SqlHelper(string connectionStrings)
{
mySqlconnection = connectionStrings;
}
public DataSet GetDataSet(string SpName, Dictionary<string, object> arrParams)
{
DataSet result = new DataSet();
using (MySqlConnection conn = new(mySqlconnection))
{
conn.Open();
using (MySqlCommand mySqlCommand = new MySqlCommand(SpName, conn))
{
mySqlCommand.CommandType = CommandType.StoredProcedure;
mySqlCommand.CommandTimeout = 30;
mySqlCommand.Parameters.AddRange(ToSqlParams(arrParams));
MySqlDataAdapter adapter = new MySqlDataAdapter(mySqlCommand);
adapter.Fill(result);
}
conn.Close();
}
return result;
}
public int ExecuteNonQuery(string SpName, Dictionary<string, object> arrParams)
{
int result = 0;
using (MySqlConnection conn = new(mySqlconnection))
{
conn.Open();
using (MySqlCommand mySqlCommand = new MySqlCommand(SpName, conn))
{
mySqlCommand.CommandType = CommandType.StoredProcedure;
mySqlCommand.CommandTimeout = 30;
mySqlCommand.Parameters.AddRange(ToSqlParams(arrParams));
result = mySqlCommand.ExecuteNonQuery();
}
conn.Close();
}
return result;
}
public MySqlParameter[] ToSqlParams(Dictionary<string, object> paramSource)
{
MySqlParameter[] mySqlParams = new MySqlParameter[paramSource.Count];
int i = 0;
foreach (KeyValuePair<string, object> param in paramSource)
{
mySqlParams[i] = new MySqlParameter();
mySqlParams[i].ParameterName = param.Key;
mySqlParams[i].Value = param.Value;
i += 1;
}
return mySqlParams;
}
}
}
** 주요 확인사항
01. SqlHelper 클래스의 생성자 2개
- ConnectionString (연결문자열) 을 넘겨받지 않는 생성자
> 내가 지정한 특정 경로에 있는 xml 파일 (D 드라이브 > .NET_MAUI > Settings > applicationSettings.xml 의
> AppSettings / DBConnection / ConnectionStrings 노드의
> id 속성의 값을 가져와서 사용한다.
# ConnectionString 을 xml로 관리하는 건 은 GitHub 형상관리 시 노출되지 않게 하고싶어서 입니다.
- ConnectionString (연결문자열) 을 넘겨받는 생성자
> 넘겨받은 문자열로 사용한다.
<?xml version="1.0" encoding="utf-8" ?>
<AppSettings id="AppSettings">
<DBConnection>
<ConnectionStrings id="Server=localhost;Port=3306;Database=tomorrow;Uid=아이디;Pwd=비밀번호"></ConnectionStrings>
</DBConnection>
</AppSettings>
02. SqlHelper 클래스 의 구조
- 기본적으로 저장 프로시저를 호출하게끔 설계
> GetDataSet () 메소드
- Select 로 마무리 되는 저장 프로시저(DB 에서 반환되는 내용이 Select 인 경우 사용)
- DataSet 을 반환한다.
> ExecuteNonQuery () 메소드
- DML 구문(Insert, Update, Delete 로 마무리 되는 저장 프로시저(DB 에서 반환되는 내용이
영향을 미친 행 수 인 경우 사용)
- int 를 반환한다. (1행 영향을 받은경우 1 반환)
> ToSqlParams() 메소드
- 저장프로시저 호출 시 MySqlCommand 객체의 Parameters 에 Add 되어야 한다.
- GetDataSet, ExecuteNonQuery 메소드 내부에서 실행됀다.
- MySqlParameter [] 을 반환한다.
[프로세스 막그림]
* SqlHelper 호출
ExecuteNonQuery를 호출합니다.
* 호출한 결과를 DB에서 조회
** 간단하게 구현해보았습니다.
** 감사드립니다.
'C#' 카테고리의 다른 글
[C#] .NET MAUI Blazor - MySql DataBase Connection 과 Stored Procedure 활용 [1] (2) | 2024.09.19 |
---|---|
[C#] .NET MAUI Blazor - Javascript 삭선 처리하기 (4) | 2024.09.10 |
[C#] .NET MAUI Blazor - 기본 달력 만들어보기(DateTime 활용) (4) | 2024.09.05 |
[C#] .NET MAUI Blazor (모바일 / 웹) 크로스 플랫폼 앱 만들기 (16) | 2024.09.03 |
C# / 링큐 실습 - LINQ / 기초 쿼리 구문 작성 (0) | 2022.08.10 |
댓글