98 lines
3.5 KiB
C#
98 lines
3.5 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Data;
|
|
using System.Data.Common;
|
|
using System.Linq;
|
|
using System.Reflection.Metadata.Ecma335;
|
|
using System.Runtime.CompilerServices;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
|
|
|
|
using MySqlConnector;
|
|
|
|
|
|
using ServerCore; using ServerBase;
|
|
|
|
|
|
namespace ServerBase;
|
|
|
|
//=============================================================================================
|
|
// MySqlConnector 관련 각종 지원 함수
|
|
//
|
|
// author : kangms
|
|
//
|
|
//=============================================================================================
|
|
public static class MySqlConnectorHelper
|
|
{
|
|
public static async Task<Result> simpleTryConnectToDb(string connectionString)
|
|
{
|
|
var result = new Result();
|
|
var err_msg = string.Empty;
|
|
|
|
using (var db_connector = new MySqlDbConnector())
|
|
{
|
|
var error_cdoe = await db_connector.initMySql(connectionString);
|
|
if (error_cdoe.isFail())
|
|
{
|
|
err_msg = $"Failed to initMySql() !!! : errCode:{error_cdoe} - connectString:{connectionString}";
|
|
result.setFail(error_cdoe, err_msg);
|
|
}
|
|
}
|
|
|
|
return result;
|
|
}
|
|
|
|
public static async Task<Result> simpleQueryExecuteForReaderAsync( string queryString, Func<MySqlDataReader, ServerErrorCode> readFunc
|
|
, string connectionString
|
|
, Int16 queryTimeoutSec = 15
|
|
, Int16 retryIntervalMSec = 1000, Int16 retryCount = 3 )
|
|
{
|
|
var result = new Result();
|
|
var err_msg = string.Empty;
|
|
|
|
using ( var db_connector = new MySqlDbConnector() )
|
|
{
|
|
for(var i = 0; i <= retryCount; i++)
|
|
{
|
|
var error_cdoe = await db_connector.initMySql(connectionString);
|
|
if (error_cdoe.isSuccess())
|
|
{
|
|
error_cdoe = await db_connector.querySQL(queryString, readFunc);
|
|
if(error_cdoe.isSuccess())
|
|
{
|
|
// 성공하면 즉시 반환 한다 !!!
|
|
result.setSuccess();
|
|
return result;
|
|
}
|
|
}
|
|
|
|
// Db와 연결이 끊어진 경우는 재시도 설정에 따라 추가 처리 한다.
|
|
if (ConnectionState.Closed == db_connector.getLastConnectionState())
|
|
{
|
|
err_msg = $"Failed to retry Open MySql !!! : errCode:{error_cdoe}";
|
|
result.setFail(error_cdoe, err_msg);
|
|
|
|
if (i > 0)
|
|
{
|
|
await Task.Delay(retryIntervalMSec);
|
|
|
|
err_msg = $"Retry Query !!! : retriedCount:{i}, queryString:{queryString} - retryableCount:{retryCount}";
|
|
Log.getLogger().error(err_msg);
|
|
}
|
|
}
|
|
// 기타 오류 발생시 실패로 처리 한다.
|
|
else
|
|
{
|
|
err_msg = $"Failed to simpleQueryExecuteForReaderAsync() !!! : errCode:{error_cdoe}, queryString:{queryString} - retryCount:{retryCount}";
|
|
Log.getLogger().error(err_msg);
|
|
result.setFail(error_cdoe, err_msg);
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
return result;
|
|
}
|
|
}
|