コード例 #1
0
        private async Task <MySqlResult> SelectPreparedStatementAsync(WorldPreparedStatement id, params object[] parameters)
        {
            PreparedStatement preparedStatement;

            if (!preparedStatements.TryGetValue(id, out preparedStatement))
            {
                Debug.Assert(preparedStatement != null);
                return(null);
            }

            Debug.Assert(preparedStatement.Types.Count == parameters.Length);

            try
            {
                using (var connection = new MySqlConnection(connectionString))
                {
                    using (var command = new MySqlCommand(preparedStatement.Query, connection))
                    {
                        for (int i = 0; i < preparedStatement.Types.Count; i++)
                        {
                            command.Parameters.Add("", preparedStatement.Types[i]).Value = parameters[i];
                        }

                        await connection.OpenAsync();

                        return(await Task.Run(() =>
                        {
                            using (MySqlDataReader commandReader = command.ExecuteReader(CommandBehavior.Default))
                            {
                                using (var result = new MySqlResult())
                                {
                                    result.Load(commandReader);
                                    result.Count = (uint)result.Rows.Count;
                                    return result;
                                }
                            }
                        }));
                    }
                }
            }
            catch (Exception exception)
            {
                LogManager.Write("Database", $"An exception occured while selecting prepared statement {id}!");
                LogManager.Write("Database", $"Exception: {exception.Message}");
            }

            return(null);
        }
コード例 #2
0
        public async Task <Account> GetAccount(string username, string authToken)
        {
            MySqlResult result = await SelectPreparedStatementAsync(WorldPreparedStatement.AccountSelect, username, authToken);

            return(result.Count == 0u ? null : new Account(result.Rows[0]));
        }
コード例 #3
0
        public uint AccountMax()
        {
            MySqlResult result = SelectPreparedStatement(WorldPreparedStatement.AccountMax);

            return(result.Read <uint>(0u, "MAX(`id`)") + 1u);
        }
コード例 #4
0
        public async Task <DataRow> GetAccountAuth(string username, string password)
        {
            MySqlResult result = await SelectPreparedStatementAsync(WorldPreparedStatement.AccountAuthSelect, username, password);

            return(result.Count == 0u ? null : result.Rows[0]);
        }