示例#1
0
        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);
        }
示例#2
0
        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);
        }
示例#3
0
        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);
        }