public Response <NoValue> ConnectAndWrite(QueryWrite query, string connString) { var response = new Response <NoValue>(); using (var conn = new OracleConnection(connString)) { try { conn.Open(); var selectTableCommand = new OracleCommand($"SELECT COUNT (*) FROM ALL_OBJECTS WHERE OBJECT_TYPE ='TABLE' AND OBJECT_NAME='{query.TableNamePrefix.ToUpper()}_{query.CryptoAdapterType.ToString().ToUpper()}_BLOCK'", conn); var tableExists = selectTableCommand.ExecuteScalar(); if (Convert.ToInt32(tableExists) == 0) { var createCommand = new OracleCommand(query.CreateTableQueryOracle, conn); createCommand.ExecuteNonQuery(); } int insertQueryNo = 0; switch (query.CryptoAdapterType) { case CryptoAdapterType.Ethereum: insertQueryNo = 2; break; case CryptoAdapterType.Bitcoin: case CryptoAdapterType.NEO: case CryptoAdapterType.Litecoin: insertQueryNo = 4; break; } var pageNumber = 0; var continuePaging = true; var queryString = string.Empty; for (var i = 1; i <= insertQueryNo; i++) { pageNumber = 0; do { var resultTuple = query.InsertDataToOracleDb(i, pageNumber); queryString = resultTuple.Item1; continuePaging = resultTuple.Item2; if (queryString != String.Empty) { var insertCommand = new OracleCommand(queryString, conn); insertCommand.ExecuteNonQuery(); } pageNumber++; }while (continuePaging == true); } response.Status = StatusEnum.Success; } catch (Exception ex) { response.Status = StatusEnum.Error; response.Message = ex.Message; _logger.Information($"OracleAdapter.ConnectAndWrite(query: {query}, connString: {connString})"); _logger.Error(ex.Message); } finally { conn.Close(); } } return(response); }
public Response <NoValue> ConnectAndWrite(QueryWrite query, string connString) { var response = new Response <NoValue>(); using (var conn = new MySqlConnection(connString)) { try { conn.Open(); var selectTableCommand = new MySqlCommand($"SHOW TABLES LIKE '{query.TableNamePrefix}{query.CryptoAdapterType.ToString()}Block';", conn); var reader = selectTableCommand.ExecuteReader(); if (!reader.HasRows) { reader.Close(); var createCommand = new MySqlCommand(query.CreateTableQueryMySQL, conn); createCommand.ExecuteNonQuery(); } else { reader.Close(); } int insertQueryNo = 0; switch (query.CryptoAdapterType) { case CryptoAdapterType.Ethereum: insertQueryNo = 2; break; case CryptoAdapterType.Bitcoin: case CryptoAdapterType.NEO: case CryptoAdapterType.Litecoin: insertQueryNo = 4; break; } var pageNumber = 0; var continuePaging = true; var queryString = string.Empty; for (var i = 1; i <= insertQueryNo; i++) { pageNumber = 0; do { var resultTuple = query.InsertDataToDb(i, pageNumber); queryString = resultTuple.Item1; continuePaging = resultTuple.Item2; if (queryString != String.Empty) { var insertCommand = new MySqlCommand(queryString, conn); insertCommand.ExecuteNonQuery(); } pageNumber++; }while (continuePaging == true); } response.Status = StatusEnum.Success; } catch (Exception ex) { response.Status = StatusEnum.Error; response.Message = ex.Message; _logger.Information($"MySQLAdapter.ConnectAndWrite(query: {query}, connString: {connString})"); _logger.Error(ex.Message); } finally { conn.Close(); } } return(response); }
public IResponse <NoValue> SendToRelationalDb <T>(long jobId, List <T> blocks) { var response = new Response <NoValue>(); try { if (blocks.Count == 0) { response.Status = StatusEnum.Success; return(response); } var enterpriseAdapter = _entity.JobTimeline.Find(jobId).Schedule.JobDefinition.Adapter1.EnterpriseAdapter.FirstOrDefault(); var query = new QueryWrite { TableNamePrefix = enterpriseAdapter.EnterpriseAdapterProperty.FirstOrDefault(eap => eap.PropertyId == (int)PropertyEnum.TableNamePrefix).Value }; if (typeof(T) == typeof(EthereumBlockModel)) { var model = (List <EthereumBlockModel>)Convert.ChangeType(blocks, typeof(List <EthereumBlockModel>)); query.CryptoAdapterType = CryptoAdapterType.Ethereum; for (var i = 0; i < model.Count; i++) { model[i].BlockIdSQL = Guid.NewGuid(); for (var j = 0; j < model[i].BlockTransactions.Count; j++) { model[i].BlockTransactions[j].ParentBlockId = model[i].BlockIdSQL; model[i].BlockTransactions[j].TransactionIdSQL = Guid.NewGuid(); } } query.EthereumBlockModel = model; } else { foreach (T block in blocks) { var blockIdSQL = typeof(T).GetProperty("BlockIdSQL"); blockIdSQL.SetValue(block, Guid.NewGuid()); var transactionList = (IEnumerable)typeof(T).GetProperty("TransactionList").GetValue(block); foreach (var transaction in transactionList) { var transactionType = transaction.GetType(); var transactionIdSQL = transactionType.GetProperty("TransactionIdSQL"); transactionIdSQL.SetValue(transaction, Guid.NewGuid()); var parentBlockIdSQL = transactionType.GetProperty("ParentBlockIdSQL"); parentBlockIdSQL.SetValue(transaction, blockIdSQL.GetValue(block)); var transactionInputList = (IEnumerable)transactionType.GetProperty("TransactionInputs").GetValue(transaction); foreach (var input in transactionInputList) { var transactionInIdSQL = input.GetType().GetProperty("TransactionInIdSQL"); transactionInIdSQL.SetValue(input, Guid.NewGuid()); var parentTransactionIdSQL = input.GetType().GetProperty("ParentTransactionIdSQL"); parentTransactionIdSQL.SetValue(input, transactionIdSQL.GetValue(transaction)); } var transactionOutputList = (IEnumerable)transactionType.GetProperty("TransactionOutputs").GetValue(transaction); foreach (var output in transactionOutputList) { var transactionOutIdSQL = output.GetType().GetProperty("TransactionOutIdSQL"); transactionOutIdSQL.SetValue(output, Guid.NewGuid()); var parentTransactionIdSQL = output.GetType().GetProperty("ParentTransactionIdSQL"); parentTransactionIdSQL.SetValue(output, transactionIdSQL.GetValue(transaction)); } } } if (typeof(T) == typeof(BitcoinBlockModel)) { var model = (List <BitcoinBlockModel>)Convert.ChangeType(blocks, typeof(List <BitcoinBlockModel>)); query.CryptoAdapterType = CryptoAdapterType.Bitcoin; query.BitcoinBlockModel = model; } else if (typeof(T) == typeof(NeoBlockModel)) { var model = (List <NeoBlockModel>)Convert.ChangeType(blocks, typeof(List <NeoBlockModel>)); query.CryptoAdapterType = CryptoAdapterType.NEO; query.NEOBlockModel = model; } else if (typeof(T) == typeof(LitecoinBlockModel)) { var model = (List <LitecoinBlockModel>)Convert.ChangeType(blocks, typeof(List <LitecoinBlockModel>)); query.CryptoAdapterType = CryptoAdapterType.Litecoin; query.LitecoinBlockModel = model; } } var config = new Config { ConnString = new DbAdapter.ConnStringCreator { Server = enterpriseAdapter.ServerIP, Port = enterpriseAdapter.Port.ToString(), Uid = enterpriseAdapter.Username, Pwd = enterpriseAdapter.Password, Database = enterpriseAdapter.DatabaseName }, Adapter = (AdapterTypeItemEnum)enterpriseAdapter.Adapter.AdapterTypeItemId, QueryWrite = query }; IAdapter adapter; switch (config.Adapter) { case AdapterTypeItemEnum.MSSQL: adapter = new MSSQLAdapter(_logger); response = adapter.ConnectAndWrite(config.QueryWrite, config.ConnString.MSSQLConnString); break; case AdapterTypeItemEnum.MySQL: adapter = new MySQLAdapter(_logger); response = adapter.ConnectAndWrite(config.QueryWrite, config.ConnString.MySQLConnString); break; case AdapterTypeItemEnum.Oracle: adapter = new OracleAdapter(_logger); response = adapter.ConnectAndWrite(config.QueryWrite, config.ConnString.OracleConnString); break; } } catch (Exception ex) { response.Status = StatusEnum.Error; response.Message = ex.Message; _logger.Information($"DbAdapterService.SendToRelationalDb(jobid: {jobId}, block:{blocks})"); _logger.Error(ex.Message); } return(response); }