From de830b97b13ac821781be46364ecf070d14c3307 Mon Sep 17 00:00:00 2001 From: Youngho Kim <1> Date: Tue, 12 Apr 2022 09:22:52 +0900 Subject: [PATCH] =?UTF-8?q?Revert=20"Database=20=EC=84=A0=EC=96=B8=20?= =?UTF-8?q?=EB=B0=8F=20=ED=98=B8=EC=B6=9C=20=EB=B0=A9=EC=8B=9D=20=EB=B3=80?= =?UTF-8?q?=EA=B2=BD"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This reverts commit 2901ae2de0f210c3f4c670974a48665520bbeb58. --- DataSaver/MainForm.cs | 36 +-- Million Prototype/Form1.Designer.cs | 6 +- Million Prototype/Form1.cs | 2 - Million/CommonProperty.cs | 6 +- Million/DbMangement/DBConnection.cs | 260 +++++++++++----------- Million/DbMangement/DBServiceFunctions.cs | 37 +-- 6 files changed, 173 insertions(+), 174 deletions(-) diff --git a/DataSaver/MainForm.cs b/DataSaver/MainForm.cs index 2a212a8..1311e2b 100644 --- a/DataSaver/MainForm.cs +++ b/DataSaver/MainForm.cs @@ -39,13 +39,16 @@ namespace DataSaver comboBoxEdit_PaymentType.Properties.Items.AddRange(Enum.GetNames(enumType: typeof(Million.CommonProperty.PaymentType))); comboBoxEdit_PaymentType.SelectedIndex = 0; - DBConnection.ConnectDatabase(comboBoxEdit_ExchangePlace.EditValue.ToString()); + // DB 서버 정보 생성 + var strConn = Million.CommonProperty.DbConnectionStr + comboBoxEdit_ExchangePlace.EditValue; + Million.CommonProperty.ConDbConnectionStr = strConn; // Market Table없으면 생성해주기 foreach (var placeName in exchangePlaceNames) { var createTableSql = Million.DbManagement.DbServiceFunctions.CreateMarketTableQuery(placeName); - Million.DbManagement.DBConnection.QueryUpdateExcuter(CommonProperty.CandleConn, createTableSql); + Million.DbManagement.DBConnection.QueryUpdateExcuter + (CommonProperty.DbConnectionMarket, createTableSql); } /////TODO 임시로 Upbit 우선순위 설정 @@ -64,10 +67,6 @@ namespace DataSaver /// 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(); @@ -89,7 +88,7 @@ namespace DataSaver private void button_AllMarketDataAcc_Click(object sender, EventArgs e) { var dbMarketDataList = CommonProperty.selectedMarketOfPlaceList; - SetCandleData(dbMarketDataList); + SetCandleData(comboBoxEdit_ExchangePlace.SelectedItem.ToString(), dbMarketDataList); } /// @@ -109,7 +108,7 @@ namespace DataSaver var marketList = new List(); marketList.Add(CommonProperty.selectedMarketOfPlaceList.FirstOrDefault(t => t.CodeFullName == market)); - SetCandleData(marketList); + SetCandleData(comboBoxEdit_ExchangePlace.SelectedItem.ToString(), marketList); } else { @@ -117,11 +116,18 @@ namespace DataSaver } } - private void SetCandleData(List marketList) + private void SetCandleData(string placeName, List marketList) { //Table생성 - CreateTableOfMarket(); - + CreateTableOfMarket(placeName); + + //거래소 가져오기 + + var type = CommonProperty.ExchangeWebReqType.UpbitCandleStick; + + if (placeName.Equals("Bithumb")) + type = CommonProperty.ExchangeWebReqType.BithumbCandleTicker; + var list = new List(); foreach (var item in checkedListBox1.CheckedItems) { @@ -132,7 +138,7 @@ namespace DataSaver foreach (var item in list) { var recentlyDbDataList = Million.DbManagement.DbServiceFunctions.GetOldNewDataList_FromDB - (marketList, (CommonProperty.MCandleTimeType)item); + (marketList, placeName, (CommonProperty.MCandleTimeType)item); //Million.DbManagement.DbServiceFunctions.SetCandleData(placeName, type, recentlyDbDataList, (CommonProperty.MCandleTimeType)item); } @@ -142,7 +148,7 @@ namespace DataSaver /// /// Market 별 Table 생성 /// - private void CreateTableOfMarket() + private void CreateTableOfMarket(string placeName) { var dbMarketDataList = CommonProperty.selectedMarketOfPlaceList; @@ -155,7 +161,7 @@ namespace DataSaver sqlQuery += Million.DbManagement.DbServiceFunctions.CreateMarketTable_ToDB(item); if (!string.IsNullOrWhiteSpace(sqlQuery)) - Million.DbManagement.DBConnection.QueryUpdateExcuter(CommonProperty.CandleConn, sqlQuery); + Million.DbManagement.DBConnection.QueryUpdateExcuter(CommonProperty.DbConnectionStr + placeName, sqlQuery); } @@ -213,7 +219,7 @@ namespace DataSaver data.CodeFullName); } if(!string.IsNullOrWhiteSpace(sqlQuery)) - Million.DbManagement.DBConnection.QueryUpdateExcuter(CommonProperty.MarketConn, sqlQuery); + Million.DbManagement.DBConnection.QueryUpdateExcuter(CommonProperty.DbConnectionMarket, sqlQuery); } } } diff --git a/Million Prototype/Form1.Designer.cs b/Million Prototype/Form1.Designer.cs index aa31926..7064b21 100644 --- a/Million Prototype/Form1.Designer.cs +++ b/Million Prototype/Form1.Designer.cs @@ -77,11 +77,11 @@ // // button3 // - this.button3.Location = new System.Drawing.Point(12, 156); + this.button3.Location = new System.Drawing.Point(47, 203); this.button3.Name = "button3"; - this.button3.Size = new System.Drawing.Size(148, 23); + this.button3.Size = new System.Drawing.Size(75, 23); this.button3.TabIndex = 4; - this.button3.Text = "실시간 데이터 구성하기"; + this.button3.Text = "button3"; this.button3.UseVisualStyleBackColor = true; this.button3.Click += new System.EventHandler(this.button3_Click); // diff --git a/Million Prototype/Form1.cs b/Million Prototype/Form1.cs index cf5d7a9..8e5b2af 100644 --- a/Million Prototype/Form1.cs +++ b/Million Prototype/Form1.cs @@ -29,7 +29,6 @@ namespace Million_Prototype public Form1() { InitializeComponent(); - DBConnection.ConnectDatabase(); } /// @@ -134,7 +133,6 @@ namespace Million_Prototype private void button3_Click(object sender, EventArgs e) { - DataSettingManager dsm = new DataSettingManager(null, PaymentType.KRW); bool firstFlag = true; for(; ; ) diff --git a/Million/CommonProperty.cs b/Million/CommonProperty.cs index 0bb2360..17cad31 100644 --- a/Million/CommonProperty.cs +++ b/Million/CommonProperty.cs @@ -1,7 +1,6 @@ using System; using System.Collections.Generic; using System.ComponentModel; -using System.Data.SqlClient; using System.Linq; using System.Text; using System.Threading.Tasks; @@ -159,13 +158,12 @@ 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 selectedMarketOfPlaceList = null; diff --git a/Million/DbMangement/DBConnection.cs b/Million/DbMangement/DBConnection.cs index d68ef13..084c861 100644 --- a/Million/DbMangement/DBConnection.cs +++ b/Million/DbMangement/DBConnection.cs @@ -14,206 +14,202 @@ namespace Million.DbManagement /// public class DBConnection { - public static void ConnectDatabase(string excahngePlace = "Upbit") + public static string GetConnectionString(string 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(); - } + return CommonProperty.DbConnectionStr + databaseName; } - public static List QueryGetExcuter_Market(SqlConnection conn, string sqlQuery) + public static List QueryGetExcuter_Market(string strDBCon, string sqlQuery) { if (string.IsNullOrWhiteSpace(sqlQuery)) return null; List marketDatas = new List(); - + SqlConnection conn = null; SqlDataReader rdr = null; - - - using (var cmd = new SqlCommand(sqlQuery, conn)) + try { - - using (rdr = cmd.ExecuteReader()) + using (conn = new SqlConnection(strDBCon)) { - try - { - 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); - } - rdr.Close(); - cmd.Dispose(); - } - catch (Exception ex) + using (var cmd = new SqlCommand(sqlQuery, conn)) { - Console.WriteLine(" ============= exception ==============="); - Console.WriteLine(ex.Message); - marketDatas = null; - if (rdr != null) - rdr.Close(); - if (cmd != null) - cmd.Dispose(); - } + 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; } - /// /// Get Candle Data List /// /// /// /// - public static List QueryGetExcuter_Candle(SqlConnection conn, string sqlQuery) + public static List QueryGetExcuter_Candle(string strDBCon, string sqlQuery) { var returnData = new List(); if (string.IsNullOrWhiteSpace(sqlQuery)) return returnData; - using (var cmd = new SqlCommand(sqlQuery, conn)) + using (var conn = new SqlConnection(strDBCon)) { - - using (var rdr = cmd.ExecuteReader()) + using (var cmd = new SqlCommand(sqlQuery, conn)) { try { - while (rdr.Read()) + 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()) { - 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); + 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; + 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); + returnData.Add(data); + } } - rdr.Close(); - cmd.Dispose(); + conn.Close(); } catch (Exception ex) { Console.WriteLine(" ============= exception ==============="); Console.WriteLine(ex.Message); - if (rdr != null) - rdr.Close(); - if (cmd != null) - cmd.Dispose(); + conn.Close(); return returnData; } - } - } return returnData; } - ///// - ///// Get Candle Data List - ///// - ///// - ///// - ///// - //public static List QueryGetExcuterTest_Candle(SqlConnection conn, string sqlQuery) - //{ - // var returnData = new List(); + /// + /// Get Candle Data List + /// + /// + /// + /// + public static List QueryGetExcuterTest_Candle(string strDBCon, string sqlQuery) + { + var returnData = new List(); - // if (string.IsNullOrWhiteSpace(sqlQuery)) - // return returnData; + if (string.IsNullOrWhiteSpace(sqlQuery)) + return returnData; + using (var conn = new SqlConnection(strDBCon)) + { + 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); + } + } + } + } - // 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; - //} + return returnData; + } /// /// Create Market Table /// /// conn /// create table sql - public static void QueryUpdateExcuter(SqlConnection conn, string sqlQuery) + public static void QueryUpdateExcuter(string strDBCon, string sqlQuery) { - + SqlConnection conn = null; SqlDataReader rdr = null; - - using (var cmd = new SqlCommand(sqlQuery, conn)) + + try { - try - { - using (rdr = cmd.ExecuteReader()) - { - } - rdr.Close(); - cmd.Dispose(); - } - catch (Exception e) + using (conn = new SqlConnection(strDBCon)) { - Console.WriteLine(" ============= exception ==============="); - Console.WriteLine(e.Message); - if (rdr != null) - rdr.Close(); - if (cmd != null) - cmd.Dispose(); + using (var cmd = new SqlCommand(sqlQuery, conn)) + { + 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(); + } } } diff --git a/Million/DbMangement/DBServiceFunctions.cs b/Million/DbMangement/DBServiceFunctions.cs index fc270cf..8a1dc6d 100644 --- a/Million/DbMangement/DBServiceFunctions.cs +++ b/Million/DbMangement/DBServiceFunctions.cs @@ -9,12 +9,8 @@ using System.Threading.Tasks; namespace Million.DbManagement { - /// - /// DB 데이터 가져오는 Service Functions Class - /// public static class DbServiceFunctions { - /// /// DB Market 테이블 생성 /// @@ -80,7 +76,9 @@ namespace Million.DbManagement /// /// public static List GetMarketDatas(string tableName, string payment = null) - { + { + var strDbCon = $"{CommonProperty.DbConnectionStr}Market"; + var subSql = ""; if(payment != null) { @@ -90,7 +88,7 @@ namespace Million.DbManagement // Query문 만들기 var sqlQuery = string.Format("select * from dbo.{0} where IsValid = 1 {1};", tableName, subSql); - return DBConnection.QueryGetExcuter_Market(CommonProperty.MarketConn, sqlQuery); + return DBConnection.QueryGetExcuter_Market(strDbCon, sqlQuery); } /// @@ -107,7 +105,8 @@ 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); @@ -127,7 +126,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(CommonProperty.CandleConn, sqlQuery); + var dataList = DBConnection.QueryGetExcuter_Candle(strDbCon, sqlQuery); if (dataList == null) return returnData; @@ -150,7 +149,8 @@ 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(CommonProperty.CandleConn, sqlQuery); + var dataList = DBConnection.QueryGetExcuter_Candle(strDbCon, sqlQuery); if (dataList == null) return returnData; @@ -187,10 +187,11 @@ namespace Million.DbManagement /// /// /// - public static List GetOldNewDataList_FromDB(List marketNameList, MCandleTimeType candleTimeType = MCandleTimeType.M1) + public static List GetOldNewDataList_FromDB(List marketNameList, string databaseName, MCandleTimeType candleTimeType = MCandleTimeType.M1) { - var returnData = new List(); + var returnData = new List(); + var strDbCon = CommonProperty.DbConnectionStr + databaseName; //최신 데이터 foreach (var item in marketNameList) @@ -199,7 +200,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(CommonProperty.CandleConn, sqlQuery); + var recentlyDataList = DBConnection.QueryGetExcuter_Candle(strDbCon, sqlQuery); if (recentlyDataList.Count > 0) { @@ -222,7 +223,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(CommonProperty.CandleConn, sqlQuery); + var recentlyDataList = DBConnection.QueryGetExcuter_Candle(strDbCon, sqlQuery); if (recentlyDataList.Count > 0) { recentlyDataList[0].CandleType = CandleType.Old; @@ -241,7 +242,7 @@ namespace Million.DbManagement { var marketList = (List)marketObj; var recentlyDbDataList = GetOldNewDataList_FromDB - (marketList, MCandleTimeType.M1); + (marketList, "Upbit", (MCandleTimeType.M1)); //기존의 누락된 데이터 쌓기 while (CommonProperty.RealTimeFlag) @@ -255,12 +256,12 @@ namespace Million.DbManagement { var temp = 60 - date.Second; Thread.Sleep(temp * 1000); - recentlyDbDataList = GetOldNewDataList_FromDB(marketList, MCandleTimeType.M1); + recentlyDbDataList = GetOldNewDataList_FromDB(marketList, "Upbit", (MCandleTimeType.M1)); } } else { - recentlyDbDataList = GetOldNewDataList_FromDB(marketList, MCandleTimeType.M1); + recentlyDbDataList = GetOldNewDataList_FromDB(marketList, "Upbit", (MCandleTimeType.M1)); } } } @@ -369,7 +370,7 @@ namespace Million.DbManagement break; //초당 8회 이상안됨 (0.125초) if (!string.IsNullOrWhiteSpace(insertQuery)) - DBConnection.QueryUpdateExcuter(CommonProperty.CandleConn, insertQuery); + DBConnection.QueryUpdateExcuter(DbConnectionStr + placeName, insertQuery); Thread.Sleep(60); insertQuery = ""; }