Database 선언 및 호출 방식 변경

This commit is contained in:
Youngho Kim
2022-04-12 08:08:52 +09:00
parent fa58fc6115
commit 2901ae2de0
6 changed files with 178 additions and 177 deletions

View File

@@ -39,16 +39,13 @@ namespace DataSaver
comboBoxEdit_PaymentType.Properties.Items.AddRange(Enum.GetNames(enumType: typeof(Million.CommonProperty.PaymentType)));
comboBoxEdit_PaymentType.SelectedIndex = 0;
// DB 서버 정보 생성
var strConn = Million.CommonProperty.DbConnectionStr + comboBoxEdit_ExchangePlace.EditValue;
Million.CommonProperty.ConDbConnectionStr = strConn;
DBConnection.ConnectDatabase(comboBoxEdit_ExchangePlace.EditValue.ToString());
// Market Table없으면 생성해주기
foreach (var placeName in exchangePlaceNames)
{
var createTableSql = Million.DbManagement.DbServiceFunctions.CreateMarketTableQuery(placeName);
Million.DbManagement.DBConnection.QueryUpdateExcuter
(CommonProperty.DbConnectionMarket, createTableSql);
Million.DbManagement.DBConnection.QueryUpdateExcuter(CommonProperty.CandleConn, createTableSql);
}
/////TODO 임시로 Upbit 우선순위 설정
@@ -67,6 +64,10 @@ namespace DataSaver
/// <param name="e"></param>
private void comboBoxEdit_ExchangePlace_SelectedIndexChanged(object sender, EventArgs e)
{
//종목이 변경 될 수 있으므로 재 Connection 처리
var marketStr = comboBoxEdit_ExchangePlace.SelectedItem.ToString();
DBConnection.ConnectDatabase(marketStr);
// DB 종목(Market) 정보 가져오기
Million.DbManagement.DbServiceFunctions.GetMarketTable_FromDB(comboBoxEdit_ExchangePlace.SelectedItem.ToString());
updateMarketTableOfPlace();
@@ -88,7 +89,7 @@ namespace DataSaver
private void button_AllMarketDataAcc_Click(object sender, EventArgs e)
{
var dbMarketDataList = CommonProperty.selectedMarketOfPlaceList;
SetCandleData(comboBoxEdit_ExchangePlace.SelectedItem.ToString(), dbMarketDataList);
SetCandleData(dbMarketDataList);
}
/// <summary>
@@ -108,7 +109,7 @@ namespace DataSaver
var marketList = new List<MarketData>();
marketList.Add(CommonProperty.selectedMarketOfPlaceList.FirstOrDefault(t => t.CodeFullName == market));
SetCandleData(comboBoxEdit_ExchangePlace.SelectedItem.ToString(), marketList);
SetCandleData(marketList);
}
else
{
@@ -116,18 +117,11 @@ namespace DataSaver
}
}
private void SetCandleData(string placeName, List<MarketData> marketList)
private void SetCandleData(List<MarketData> marketList)
{
//Table생성
CreateTableOfMarket(placeName);
//거래소 가져오기
var type = CommonProperty.ExchangeWebReqType.UpbitCandleStick;
if (placeName.Equals("Bithumb"))
type = CommonProperty.ExchangeWebReqType.BithumbCandleTicker;
CreateTableOfMarket();
var list = new List<int>();
foreach (var item in checkedListBox1.CheckedItems)
{
@@ -138,7 +132,7 @@ namespace DataSaver
foreach (var item in list)
{
var recentlyDbDataList = Million.DbManagement.DbServiceFunctions.GetOldNewDataList_FromDB
(marketList, placeName, (CommonProperty.MCandleTimeType)item);
(marketList, (CommonProperty.MCandleTimeType)item);
//Million.DbManagement.DbServiceFunctions.SetCandleData(placeName, type, recentlyDbDataList, (CommonProperty.MCandleTimeType)item);
}
@@ -148,7 +142,7 @@ namespace DataSaver
/// <summary>
/// Market 별 Table 생성
/// </summary>
private void CreateTableOfMarket(string placeName)
private void CreateTableOfMarket()
{
var dbMarketDataList = CommonProperty.selectedMarketOfPlaceList;
@@ -161,7 +155,7 @@ namespace DataSaver
sqlQuery += Million.DbManagement.DbServiceFunctions.CreateMarketTable_ToDB(item);
if (!string.IsNullOrWhiteSpace(sqlQuery))
Million.DbManagement.DBConnection.QueryUpdateExcuter(CommonProperty.DbConnectionStr + placeName, sqlQuery);
Million.DbManagement.DBConnection.QueryUpdateExcuter(CommonProperty.CandleConn, sqlQuery);
}
@@ -219,7 +213,7 @@ namespace DataSaver
data.CodeFullName);
}
if(!string.IsNullOrWhiteSpace(sqlQuery))
Million.DbManagement.DBConnection.QueryUpdateExcuter(CommonProperty.DbConnectionMarket, sqlQuery);
Million.DbManagement.DBConnection.QueryUpdateExcuter(CommonProperty.MarketConn, sqlQuery);
}
}
}

View File

@@ -77,11 +77,11 @@
//
// button3
//
this.button3.Location = new System.Drawing.Point(47, 203);
this.button3.Location = new System.Drawing.Point(12, 156);
this.button3.Name = "button3";
this.button3.Size = new System.Drawing.Size(75, 23);
this.button3.Size = new System.Drawing.Size(148, 23);
this.button3.TabIndex = 4;
this.button3.Text = "button3";
this.button3.Text = "실시간 데이터 구성하기";
this.button3.UseVisualStyleBackColor = true;
this.button3.Click += new System.EventHandler(this.button3_Click);
//

View File

@@ -29,6 +29,7 @@ namespace Million_Prototype
public Form1()
{
InitializeComponent();
DBConnection.ConnectDatabase();
}
/// <summary>
@@ -133,6 +134,7 @@ namespace Million_Prototype
private void button3_Click(object sender, EventArgs e)
{
DataSettingManager dsm = new DataSettingManager(null, PaymentType.KRW);
bool firstFlag = true;
for(; ; )

View File

@@ -1,6 +1,7 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data.SqlClient;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
@@ -158,12 +159,13 @@ namespace Million
private const string DbServerUserPassword = "million!";
public static string DbConnectionStr = $"Data Source={DbServerIp};uid={DbServerUserId};pwd={DbServerUserPassword};Database=";
public static string DbConnectionMarket = DbConnectionStr + "Market";
public static SqlConnection MarketConn = null;
public static SqlConnection CandleConn = null;
#endregion
#region DataSaver 사용되는 공용 변수
//현재 시점에서 사용되고 있는 DB Connection String
public static string ConDbConnectionStr = DbConnectionStr;
// 현재 시점에서 사용되고 있는 Place의 Market List 정보
public static List<MarketData> selectedMarketOfPlaceList = null;

View File

@@ -14,202 +14,206 @@ namespace Million.DbManagement
/// </summary>
public class DBConnection
{
public static string GetConnectionString(string databaseName)
public static void ConnectDatabase(string excahngePlace = "Upbit")
{
return CommonProperty.DbConnectionStr + databaseName;
//candle data, market data
var marketConStr = $"{CommonProperty.DbConnectionStr}Market";
var candleConStr = CommonProperty.DbConnectionStr + excahngePlace;
if (CommonProperty.MarketConn == null)
{
CommonProperty.MarketConn = new System.Data.SqlClient.SqlConnection(marketConStr);
CommonProperty.MarketConn.Open();
}
if (CommonProperty.CandleConn == null)
{
CommonProperty.CandleConn = new System.Data.SqlClient.SqlConnection(candleConStr);
CommonProperty.CandleConn.Open();
}
else
{
CommonProperty.CandleConn.Close();
CommonProperty.CandleConn = new System.Data.SqlClient.SqlConnection(candleConStr);
CommonProperty.CandleConn.Open();
}
}
public static List<MarketData> QueryGetExcuter_Market(string strDBCon, string sqlQuery)
public static List<MarketData> QueryGetExcuter_Market(SqlConnection conn, string sqlQuery)
{
if (string.IsNullOrWhiteSpace(sqlQuery))
return null;
List<MarketData> marketDatas = new List<MarketData>();
SqlConnection conn = null;
SqlDataReader rdr = null;
try
using (var cmd = new SqlCommand(sqlQuery, conn))
{
using (conn = new SqlConnection(strDBCon))
{
using (var cmd = new SqlCommand(sqlQuery, conn))
{
conn.Open();
using (rdr = cmd.ExecuteReader())
{
while (rdr.Read())
{
var marKetData = new MarketData();
marKetData.CodeName = rdr["CodeName"].ToString();
marKetData.CodeFullName = rdr["CodeFullName"].ToString();
marKetData.ExchangePlace = rdr["ExchangePlace"].ToString();
marKetData.Payment = rdr["Payment"].ToString();
marKetData.KorName = rdr["KorName"].ToString();
marKetData.IsValid = bool.Parse(rdr["IsValid"].ToString());
marketDatas.Add(marKetData);
}
}
}
}
}
catch (Exception ex)
{
Console.WriteLine(" ============= exception ===============");
Console.WriteLine(ex.Message);
marketDatas = null;
}
finally
{
if (rdr != null)
rdr.Close();
if (conn != null)
conn.Close();
}
return marketDatas;
}
/// <summary>
/// Get Candle Data List
/// </summary>
/// <param name="strDBCon"></param>
/// <param name="sqlQuery"></param>
/// <returns></returns>
public static List<CandleData> QueryGetExcuter_Candle(string strDBCon, string sqlQuery)
{
var returnData = new List<CandleData>();
if (string.IsNullOrWhiteSpace(sqlQuery))
return returnData;
using (var conn = new SqlConnection(strDBCon))
{
using (var cmd = new SqlCommand(sqlQuery, conn))
using (rdr = cmd.ExecuteReader())
{
try
{
conn.Open();
//using (SqlDataAdapter sda = new SqlDataAdapter())
//{
// cmd.Connection = conn;
// sda.SelectCommand = cmd;
// using (DataSet ds = new DataSet())
// {
// sda.Fill(ds);
// }
//}
using (var rdr = cmd.ExecuteReader())
while (rdr.Read())
{
while (rdr.Read())
{
var dateTime = rdr["DateTime"]?.ToString();
double.TryParse(rdr["StartValue"]?.ToString(), out var startValue);
double.TryParse(rdr["EndValue"]?.ToString(), out var endValue);
double.TryParse(rdr["HighValue"]?.ToString(), out var highValue);
double.TryParse(rdr["LowValue"]?.ToString(), out var lowValue);
double.TryParse(rdr["MoneyVolume"]?.ToString(), out var moneyVolume);
int.TryParse(rdr["CandleTimeType"]?.ToString(), out var candleTimeType);
var data = new CandleData();
data.DateTime = Convert.ToDateTime(dateTime);
data.StartValue = startValue;
data.EndValue = endValue;
data.HighValue = highValue;
data.LowValue = lowValue;
data.MoneyVolume = moneyVolume;
data.CandleTimeType = candleTimeType;
returnData.Add(data);
}
var marKetData = new MarketData();
marKetData.CodeName = rdr["CodeName"].ToString();
marKetData.CodeFullName = rdr["CodeFullName"].ToString();
marKetData.ExchangePlace = rdr["ExchangePlace"].ToString();
marKetData.Payment = rdr["Payment"].ToString();
marKetData.KorName = rdr["KorName"].ToString();
marKetData.IsValid = bool.Parse(rdr["IsValid"].ToString());
marketDatas.Add(marKetData);
}
conn.Close();
rdr.Close();
cmd.Dispose();
}
catch (Exception ex)
{
Console.WriteLine(" ============= exception ===============");
Console.WriteLine(ex.Message);
conn.Close();
return returnData;
}
marketDatas = null;
if (rdr != null)
rdr.Close();
if (cmd != null)
cmd.Dispose();
}
}
}
return returnData;
return marketDatas;
}
/// <summary>
/// Get Candle Data List
/// </summary>
/// <param name="strDBCon"></param>
/// <param name="sqlQuery"></param>
/// <returns></returns>
public static List<CandleData> QueryGetExcuterTest_Candle(string strDBCon, string sqlQuery)
public static List<CandleData> QueryGetExcuter_Candle(SqlConnection conn, string sqlQuery)
{
var returnData = new List<CandleData>();
if (string.IsNullOrWhiteSpace(sqlQuery))
return returnData;
using (var conn = new SqlConnection(strDBCon))
using (var cmd = new SqlCommand(sqlQuery, conn))
{
using (var cmd = new SqlCommand(sqlQuery, conn))
using (var rdr = cmd.ExecuteReader())
{
using (SqlDataAdapter sda = new SqlDataAdapter())
try
{
cmd.Connection = conn;
sda.SelectCommand = cmd;
using (DataSet ds = new DataSet())
while (rdr.Read())
{
sda.Fill(ds);
var dateTime = rdr["DateTime"]?.ToString();
double.TryParse(rdr["StartValue"]?.ToString(), out var startValue);
double.TryParse(rdr["EndValue"]?.ToString(), out var endValue);
double.TryParse(rdr["HighValue"]?.ToString(), out var highValue);
double.TryParse(rdr["LowValue"]?.ToString(), out var lowValue);
double.TryParse(rdr["MoneyVolume"]?.ToString(), out var moneyVolume);
int.TryParse(rdr["CandleTimeType"]?.ToString(), out var candleTimeType);
var data = new CandleData();
data.DateTime = Convert.ToDateTime(dateTime);
data.StartValue = startValue;
data.EndValue = endValue;
data.HighValue = highValue;
data.LowValue = lowValue;
data.MoneyVolume = moneyVolume;
data.CandleTimeType = candleTimeType;
returnData.Add(data);
}
rdr.Close();
cmd.Dispose();
}
catch (Exception ex)
{
Console.WriteLine(" ============= exception ===============");
Console.WriteLine(ex.Message);
if (rdr != null)
rdr.Close();
if (cmd != null)
cmd.Dispose();
return returnData;
}
}
}
return returnData;
}
///// <summary>
///// Get Candle Data List
///// </summary>
///// <param name="strDBCon"></param>
///// <param name="sqlQuery"></param>
///// <returns></returns>
//public static List<CandleData> QueryGetExcuterTest_Candle(SqlConnection conn, string sqlQuery)
//{
// var returnData = new List<CandleData>();
// if (string.IsNullOrWhiteSpace(sqlQuery))
// return returnData;
// using (var cmd = new SqlCommand(sqlQuery, conn))
// {
// using (SqlDataAdapter sda = new SqlDataAdapter())
// {
// cmd.Connection = conn;
// sda.SelectCommand = cmd;
// using (DataSet ds = new DataSet())
// {
// sda.Fill(ds);
// }
// }
// }
// return returnData;
//}
/// <summary>
/// Create Market Table
/// </summary>
/// <param name="strDBCon">conn</param>
/// <param name="sqlQuery">create table sql</param>
public static void QueryUpdateExcuter(string strDBCon, string sqlQuery)
public static void QueryUpdateExcuter(SqlConnection conn, string sqlQuery)
{
SqlConnection conn = null;
SqlDataReader rdr = null;
try
using (var cmd = new SqlCommand(sqlQuery, conn))
{
using (conn = new SqlConnection(strDBCon))
{
using (var cmd = new SqlCommand(sqlQuery, conn))
try
{
using (rdr = cmd.ExecuteReader())
{
conn.Open();
using (rdr = cmd.ExecuteReader())
{
}
}
conn.Close();
}
}
catch (Exception e)
{
Console.WriteLine(" ============= exception ===============");
Console.WriteLine(e.Message);
if (rdr != null)
rdr.Close();
if (conn != null)
conn.Close();
cmd.Dispose();
}
catch (Exception e)
{
Console.WriteLine(" ============= exception ===============");
Console.WriteLine(e.Message);
if (rdr != null)
rdr.Close();
if (cmd != null)
cmd.Dispose();
}
}
}
}

View File

@@ -9,8 +9,12 @@ using System.Threading.Tasks;
namespace Million.DbManagement
{
/// <summary>
/// DB 데이터 가져오는 Service Functions Class
/// </summary>
public static class DbServiceFunctions
{
/// <summary>
/// DB Market 테이블 생성
/// </summary>
@@ -76,9 +80,7 @@ namespace Million.DbManagement
/// <param name="tableName"></param>
/// <returns></returns>
public static List<MarketData> GetMarketDatas(string tableName, string payment = null)
{
var strDbCon = $"{CommonProperty.DbConnectionStr}Market";
{
var subSql = "";
if(payment != null)
{
@@ -88,7 +90,7 @@ namespace Million.DbManagement
// Query문 만들기
var sqlQuery = string.Format("select * from dbo.{0} where IsValid = 1 {1};", tableName, subSql);
return DBConnection.QueryGetExcuter_Market(strDbCon, sqlQuery);
return DBConnection.QueryGetExcuter_Market(CommonProperty.MarketConn, sqlQuery);
}
/// <summary>
@@ -105,8 +107,7 @@ namespace Million.DbManagement
{
return returnData;
}
var strDbCon = CommonProperty.DbConnectionStr + marketData.ExchangePlace;
if (candleTimeType == MCandleTimeType.M1 || candleTimeType == MCandleTimeType.M3 || candleTimeType == MCandleTimeType.M5 ||
candleTimeType == MCandleTimeType.M10 | candleTimeType == MCandleTimeType.M15|| candleTimeType == MCandleTimeType.M30)
startDate = startDate.AddMinutes(-72 * (int)candleTimeType);
@@ -126,7 +127,7 @@ namespace Million.DbManagement
var sqlQuery = string.Format(@"SELECT [DateTime],[StartValue],[EndValue],[HighValue],[LowValue],[MoneyVolume],[CandleTimeType] FROM [{0}] WHERE [DateTime] >= '{1}' AND [DateTime] <= '{2}' AND [CandleTimeType] = {3} ORDER BY [DateTime] ASC", marketData.CodeFullName, startDate.ToString("yyyy-MM-dd HH:mm:ss"), endDate.ToString("yyyy-MM-dd HH:mm:ss"), candleTimeType);
var dataList = DBConnection.QueryGetExcuter_Candle(strDbCon, sqlQuery);
var dataList = DBConnection.QueryGetExcuter_Candle(CommonProperty.CandleConn, sqlQuery);
if (dataList == null) return returnData;
@@ -149,8 +150,7 @@ namespace Million.DbManagement
if (marketData == null)
{
return returnData;
}
var strDbCon = CommonProperty.DbConnectionStr + marketData.ExchangePlace;
}
if (candleTimeType == MCandleTimeType.M1 || candleTimeType == MCandleTimeType.M3 || candleTimeType == MCandleTimeType.M5 ||
candleTimeType == MCandleTimeType.M10 | candleTimeType == MCandleTimeType.M15 || candleTimeType == MCandleTimeType.M30)
@@ -171,7 +171,7 @@ namespace Million.DbManagement
var sqlQuery = string.Format(@"SELECT TOP({0}) [DateTime],[StartValue],[EndValue],[HighValue],[LowValue],[MoneyVolume],[CandleTimeType] FROM [{1}] WHERE [DateTime] >= '{2}' AND [CandleTimeType] = {3} ORDER BY [DateTime] ASC", count, marketData.CodeFullName, startDate.ToString("yyyy-MM-dd HH:mm:ss"), ((int)candleTimeType).ToString());
var dataList = DBConnection.QueryGetExcuter_Candle(strDbCon, sqlQuery);
var dataList = DBConnection.QueryGetExcuter_Candle(CommonProperty.CandleConn, sqlQuery);
if (dataList == null) return returnData;
@@ -187,11 +187,10 @@ namespace Million.DbManagement
/// <param name="marketNameList"></param>
/// <param name="databaseName"></param>
/// <returns></returns>
public static List<CandleDataList> GetOldNewDataList_FromDB(List<MarketData> marketNameList, string databaseName, MCandleTimeType candleTimeType = MCandleTimeType.M1)
public static List<CandleDataList> GetOldNewDataList_FromDB(List<MarketData> marketNameList, MCandleTimeType candleTimeType = MCandleTimeType.M1)
{
var returnData = new List<CandleDataList>();
var strDbCon = CommonProperty.DbConnectionStr + databaseName;
var returnData = new List<CandleDataList>();
//최신 데이터
foreach (var item in marketNameList)
@@ -200,7 +199,7 @@ namespace Million.DbManagement
data.ConGoodsData = item;
var sqlQuery = string.Format(@"SELECT TOP(1) [DateTime],[StartValue],[EndValue],[HighValue],[LowValue],[MoneyVolume],[CandleTimeType] FROM [{0}] WHERE [CandleTimeType] = {1} ORDER BY [DateTime] DESC", item.CodeFullName, ((int) candleTimeType).ToString());
var recentlyDataList = DBConnection.QueryGetExcuter_Candle(strDbCon, sqlQuery);
var recentlyDataList = DBConnection.QueryGetExcuter_Candle(CommonProperty.CandleConn, sqlQuery);
if (recentlyDataList.Count > 0)
{
@@ -223,7 +222,7 @@ namespace Million.DbManagement
// 1개라도 있을 경우
var sqlQuery = string.Format("SELECT TOP(1) [DateTime],[StartValue],[EndValue],[HighValue],[LowValue],[MoneyVolume],[CandleTimeType] FROM [{0}] WHERE [CandleTimeType] = {1} ORDER BY [DateTime] ASC", item.ConGoodsData.CodeFullName, ((int)candleTimeType).ToString());
var recentlyDataList = DBConnection.QueryGetExcuter_Candle(strDbCon, sqlQuery);
var recentlyDataList = DBConnection.QueryGetExcuter_Candle(CommonProperty.CandleConn, sqlQuery);
if (recentlyDataList.Count > 0)
{
recentlyDataList[0].CandleType = CandleType.Old;
@@ -242,7 +241,7 @@ namespace Million.DbManagement
{
var marketList = (List<MarketData>)marketObj;
var recentlyDbDataList = GetOldNewDataList_FromDB
(marketList, "Upbit", (MCandleTimeType.M1));
(marketList, MCandleTimeType.M1);
//기존의 누락된 데이터 쌓기
while (CommonProperty.RealTimeFlag)
@@ -256,12 +255,12 @@ namespace Million.DbManagement
{
var temp = 60 - date.Second;
Thread.Sleep(temp * 1000);
recentlyDbDataList = GetOldNewDataList_FromDB(marketList, "Upbit", (MCandleTimeType.M1));
recentlyDbDataList = GetOldNewDataList_FromDB(marketList, MCandleTimeType.M1);
}
}
else
{
recentlyDbDataList = GetOldNewDataList_FromDB(marketList, "Upbit", (MCandleTimeType.M1));
recentlyDbDataList = GetOldNewDataList_FromDB(marketList, MCandleTimeType.M1);
}
}
}
@@ -370,7 +369,7 @@ namespace Million.DbManagement
break;
//초당 8회 이상안됨 (0.125초)
if (!string.IsNullOrWhiteSpace(insertQuery))
DBConnection.QueryUpdateExcuter(DbConnectionStr + placeName, insertQuery);
DBConnection.QueryUpdateExcuter(CommonProperty.CandleConn, insertQuery);
Thread.Sleep(60);
insertQuery = "";
}