示例#1
0
        private async Task Run()
        {
            // setup connection
            var connectionString = GetConvar($"{m_name}_connection_string", "");

            if (string.IsNullOrEmpty(connectionString))
            {
                throw new InvalidOperationException($"No connection string configured for {m_name}. " +
                                                    $"Please set the `{m_name}_connection_string` convar in your server startup script.");
            }

            var csBuilder = new DbConnectionStringBuilder();

            csBuilder.ConnectionString = connectionString;

            if (!csBuilder.TryGetValue("dbProvider", out object provider))
            {
                provider = "mysql";
            }

            csBuilder.Remove("dbProvider");

            var factory = m_factoryList.GetFactory(provider.ToString());

            if (factory == null)
            {
                throw new InvalidOperationException($"Invalid database provider name {provider} in connection string for {m_name}. " +
                                                    $"Supported providers: [{string.Join(", ", m_factoryList.GetNames())}].");
            }

            m_dataAbstraction = m_factoryList.GetDataAbstraction(provider.ToString());

            m_connectionString = csBuilder.ConnectionString;

            using (var connection = await OpenConnection(factory))
            {
                using (var command = connection.CreateCommand())
                {
                    command.CommandText = "SELECT 1";

                    var r = await command.ExecuteScalarAsync();

                    if (Convert.ToInt32(r) == 1)
                    {
                        m_factory = factory;
                    }
                    else
                    {
                        throw new InvalidOperationException($"SELECT 1 failed for {m_name} - it returned {r} instead.");
                    }
                }
            }
        }
示例#2
0
 public override Task <object> ExecuteCommandAsync(DbDataAbstraction dataAbstraction)
 {
     return(cmd.ExecuteScalarAsync());
 }
示例#3
0
        public override async Task <IList <IDictionary <string, object> > > ExecuteCommandAsync(DbDataAbstraction dataAbstraction)
        {
            var rows = new List <IDictionary <string, object> >();

            using (var reader = await cmd.ExecuteReaderAsync())
            {
                while (await reader.ReadAsync())
                {
                    rows.Add(
                        Enumerable.Range(0, reader.FieldCount)
                        .ToDictionary(
                            i => reader.GetName(i),
                            i => !reader.IsDBNull(i) ? reader.GetValue(i) : null
                            )
                        );
                }
            }

            return(rows);
        }
示例#4
0
文件: DbTask.cs 项目: d0p3t/dblyr
 public virtual string ModifyQuery(string query, DbDataAbstraction dataAbstraction)
 {
     return(query);
 }
示例#5
0
文件: DbTask.cs 项目: d0p3t/dblyr
 public abstract Task <TResult> ExecuteCommandAsync(DbDataAbstraction dataAbstraction);
示例#6
0
 public override async Task <object> ExecuteCommandAsync(DbDataAbstraction dataAbstraction)
 {
     return(await cmd.ExecuteNonQueryAsync());
 }
示例#7
0
 public override string ModifyQuery(string query, DbDataAbstraction dataAbstraction)
 {
     return(dataAbstraction.AppendInsertIdQuery(query));
 }