using System.Text; using MySql.Data.MySqlClient; using MarketData.MarketDataModel; using MarketData.Utils; namespace MarketData.DataAccess { public class EconomicIndicatorDA { private EconomicIndicatorDA() { } /// /// Retrieves a distinct list of indicator_code /// /// public static List GetDistinctIndicators() { MySqlConnection sqlConnection = null; MySqlCommand sqlCommand = null; MySqlDataReader sqlDataReader = null; List indicators = new List(); try { sqlConnection = SqlUtils.CreateMySqlConnection(MainDataSource.Instance.LocateDataSource("market_data")); sqlCommand = sqlConnection.CreateCommand(); StringBuilder sb = new StringBuilder(); sb.Append("select distinct(indicator_code) from EconomicIndicators "); sb.Append("ORDER BY 1 asc"); sqlCommand.CommandText = sb.ToString(); sqlDataReader = sqlCommand.ExecuteReader(); while (sqlDataReader.Read()) { indicators.Add(sqlDataReader.GetString(0).ToUpper()); } sqlDataReader.Close(); sqlDataReader.Dispose(); sqlCommand.Dispose(); sqlConnection.Close(); sqlConnection.Dispose(); return indicators; } catch (Exception exception) { MDTrace.WriteLine(LogLevel.DEBUG, String.Format("Exception:{0}", exception.ToString())); return null; } finally { if (null != sqlDataReader) { sqlDataReader.Close(); sqlDataReader.Dispose(); } if (null != sqlCommand) { sqlCommand.Dispose(); } if (null != sqlConnection) { sqlConnection.Close(); sqlConnection.Dispose(); } } } /// /// Retrieve all records /// /// public static EconomicIndicators GetEconomicIndicators(String indicatorCode, String countryCode="USA") { MySqlConnection sqlConnection = null; MySqlCommand sqlCommand = null; MySqlDataReader sqlDataReader = null; EconomicIndicators economicIndicators = new EconomicIndicators(); try { sqlConnection = SqlUtils.CreateMySqlConnection(MainDataSource.Instance.LocateDataSource("market_data")); sqlCommand = sqlConnection.CreateCommand(); StringBuilder sb = new StringBuilder(); sb.Append("select country_code,country_name,indicator_code,indicator_name,indicator_value,year,source from EconomicIndicators").Append(" "); sb.Append("where indicator_code=").Append(SqlUtils.AddQuotes(indicatorCode)).Append(" "); sb.Append("AND country_code = ").Append(SqlUtils.AddQuotes(countryCode)).Append(" "); sb.Append("ORDER BY YEAR DESC"); sqlCommand.CommandText = sb.ToString(); sqlDataReader = sqlCommand.ExecuteReader(); while (sqlDataReader.Read()) { EconomicIndicator economicIndicator = new EconomicIndicator(); if (!sqlDataReader.IsDBNull(0)) economicIndicator.CountryCode = sqlDataReader.GetString(0); if (!sqlDataReader.IsDBNull(1)) economicIndicator.CountryName = sqlDataReader.GetString(1); if (!sqlDataReader.IsDBNull(2)) economicIndicator.IndicatorCode = sqlDataReader.GetString(2); if (!sqlDataReader.IsDBNull(3)) economicIndicator.IndicatorName = sqlDataReader.GetString(3); if (!sqlDataReader.IsDBNull(4)) economicIndicator.IndicatorValue = sqlDataReader.GetDouble(4); if (!sqlDataReader.IsDBNull(5)) economicIndicator.Year = sqlDataReader.GetInt32(5); if (!sqlDataReader.IsDBNull(6)) economicIndicator.Source = sqlDataReader.GetString(6); economicIndicators.Add(economicIndicator); } sqlDataReader.Close(); sqlDataReader.Dispose(); sqlCommand.Dispose(); sqlConnection.Close(); sqlConnection.Dispose(); return economicIndicators; } catch (Exception exception) { MDTrace.WriteLine(LogLevel.DEBUG, String.Format("Exception:{0}", exception.ToString())); return null; } finally { if (null != sqlDataReader) { sqlDataReader.Close(); sqlDataReader.Dispose(); } if (null != sqlCommand) { sqlCommand.Dispose(); } if (null != sqlConnection) { sqlConnection.Close(); sqlConnection.Dispose(); } } } /// /// Retrieve all records /// /// public static EconomicIndicators GetEconomicIndicators() { MySqlConnection sqlConnection = null; MySqlCommand sqlCommand = null; MySqlDataReader sqlDataReader = null; EconomicIndicators economicIndicators = new EconomicIndicators(); try { sqlConnection = SqlUtils.CreateMySqlConnection(MainDataSource.Instance.LocateDataSource("market_data")); sqlCommand = sqlConnection.CreateCommand(); StringBuilder sb = new StringBuilder(); sb.Append("select country_code,country_name,indicator_code,indicator_name,indicator_value,year,source from EconomicIndicators"); sqlCommand.CommandText = sb.ToString(); sqlDataReader = sqlCommand.ExecuteReader(); while (sqlDataReader.Read()) { EconomicIndicator economicIndicator = new EconomicIndicator(); if (!sqlDataReader.IsDBNull(0)) economicIndicator.CountryCode = sqlDataReader.GetString(0); if (!sqlDataReader.IsDBNull(1)) economicIndicator.CountryName = sqlDataReader.GetString(1); if (!sqlDataReader.IsDBNull(2)) economicIndicator.IndicatorCode = sqlDataReader.GetString(2); if (!sqlDataReader.IsDBNull(3)) economicIndicator.IndicatorName = sqlDataReader.GetString(3); if (!sqlDataReader.IsDBNull(4)) economicIndicator.IndicatorValue = sqlDataReader.GetDouble(4); if (!sqlDataReader.IsDBNull(5)) economicIndicator.Year = sqlDataReader.GetInt32(5); if (!sqlDataReader.IsDBNull(6)) economicIndicator.Source = sqlDataReader.GetString(6); economicIndicators.Add(economicIndicator); } sqlDataReader.Close(); sqlDataReader.Dispose(); sqlCommand.Dispose(); sqlConnection.Close(); sqlConnection.Dispose(); return economicIndicators; } catch (Exception exception) { MDTrace.WriteLine(LogLevel.DEBUG, String.Format("Exception:{0}", exception.ToString())); return null; } finally { if (null != sqlDataReader) { sqlDataReader.Close(); sqlDataReader.Dispose(); } if (null != sqlCommand) { sqlCommand.Dispose(); } if (null != sqlConnection) { sqlConnection.Close(); sqlConnection.Dispose(); } } } /// /// Upsert items /// /// public static bool InsertUpdateEconomicIndicators(EconomicIndicators economicIndicators) { MySqlConnection sqlConnection = null; MySqlCommand sqlCommand = null; MySqlTransaction sqlTransaction = null; try { sqlConnection = SqlUtils.CreateMySqlConnection(MainDataSource.Instance.LocateDataSource("market_data")); sqlTransaction = sqlConnection.BeginTransaction(System.Data.IsolationLevel.ReadUncommitted); sqlCommand = sqlConnection.CreateCommand(); sqlCommand.Transaction = sqlTransaction; List distinctCountryCodes = (from EconomicIndicator economicIndicator in economicIndicators select economicIndicator.CountryCode).Distinct().ToList(); List indicatorCodes = (from EconomicIndicator economicIndicator in economicIndicators select economicIndicator.IndicatorCode).Distinct().ToList(); if(indicatorCodes.Count>1) { MDTrace.WriteLine(LogLevel.DEBUG, String.Format("InsertUpdateEconomicIndicators Expected a single indicator code but found multiple '{0}'",Utility.ListToString(indicatorCodes))); return false; } for (int index = 0; index < distinctCountryCodes.Count; index++) { String countryCode = distinctCountryCodes[index]; List years = (from EconomicIndicator economicIndicator in economicIndicators select economicIndicator.Year).Distinct().ToList(); DeleteEconomicIndicator(indicatorCodes.First(),countryCode, years, sqlCommand, sqlTransaction); } InsertEconomicIndicators(economicIndicators, sqlCommand, sqlTransaction); sqlTransaction.Commit(); sqlTransaction.Dispose(); sqlCommand.Dispose(); sqlConnection.Close(); sqlConnection.Dispose(); sqlConnection = null; sqlCommand = null; sqlTransaction = null; return true; } catch (Exception exception) { MDTrace.WriteLine(LogLevel.DEBUG, String.Format("Exception:{0}", exception.ToString())); return false; } finally { if (null != sqlConnection) { sqlConnection.Close(); sqlConnection.Dispose(); } if (null != sqlCommand) { sqlCommand.Dispose(); } if (null != sqlTransaction) { sqlTransaction.Dispose(); } } } /// /// Remove items /// /// private static bool DeleteEconomicIndicator(String indicatorCode,String countryCode, List years, MySqlCommand sqlCommand, MySqlTransaction sqlTransaction) { String strQuery = null; try { StringBuilder sb = new StringBuilder(); sb.Append("delete from EconomicIndicators ").Append(" where "); sb.Append("indicator_code=").Append("'").Append(indicatorCode).Append("'").Append(" and "); sb.Append("country_code=").Append("'").Append(countryCode).Append("'").Append(" and "); sb.Append("year in ").Append(SqlUtils.CreateInClause(years)); strQuery = sb.ToString(); sqlCommand.CommandText = strQuery; sqlCommand.ExecuteNonQuery(); return true; } catch (Exception exception) { MDTrace.WriteLine(LogLevel.DEBUG, String.Format("Exception:{0}, query was {1}", exception.ToString(), strQuery)); return false; } } /// /// Remove items /// /// // private static bool DeleteEconomicIndicator(String countryCode, List years, MySqlCommand sqlCommand, MySqlTransaction sqlTransaction) // { // String strQuery = null; // try // { // StringBuilder sb = new StringBuilder(); // sb.Append("delete from EconomicIndicators ").Append(" where "); // sb.Append("country_code=").Append("'").Append(countryCode).Append("'").Append(" and "); // sb.Append("year in ").Append(SqlUtils.CreateInClause(years)); // strQuery = sb.ToString(); // sqlCommand.CommandText = strQuery; // sqlCommand.ExecuteNonQuery(); // return true; // } // catch (Exception exception) // { // MDTrace.WriteLine(LogLevel.DEBUG, String.Format("Exception:{0}, query was {1}", exception.ToString(), strQuery)); // return false; // } // } /// /// Insert items /// /// private static bool InsertEconomicIndicators(EconomicIndicators economicIndicators,MySqlCommand sqlCommand,MySqlTransaction sqlTransaction) { String strQuery=null; try { StringBuilder sb=new StringBuilder(); sb.Append("insert into EconomicIndicators(country_code,country_name,indicator_code,indicator_name,indicator_value,year,source)values"); for(int index=0;index