Пример #1
0
        /// <summary>
        /// Executes a Query asynchronously
        /// </summary>
        /// <param name="context">Database Context</param>
        /// <param name="query">SQL</param>
        /// <param name="parameters">Parameters</param>
        /// <returns>awaitable Task</returns>
        public static async Task <IReadOnlyDictionary <string, object>[]> MySqlQueryAsync(DatabaseContext context, string query, MySqlParameter[] parameters = null)
        {
            //Place to store Results
            List <IReadOnlyDictionary <string, object> > results = new();
            //Create and Open Connection
            MySqlConnection connection = new(context.GetMySqlConnectionString());
            await connection.OpenAsync();

            //Create command with `query` Command Text
            MySqlCommand cmd = connection.CreateCommand();

            cmd.CommandText = query;
            //Add Parameters if present
            if (parameters != null)
            {
                cmd.Parameters.AddRange(parameters);
            }
            //Execute Data Reader
            await using MySqlDataReader reader = await cmd.ExecuteReaderAsync();

            //Read Columns
            ReadOnlyCollection <DbColumn> columns = await reader.GetColumnSchemaAsync();

            //Read Results
            while (await reader.ReadAsync())
            {
                //Place to store Result
                Dictionary <string, object> result = new();
                //Create Object Array with the size of the amount of columns
                object[] values = new object[columns.Count];
                //Get Values
                reader.GetValues(values);
                //Iterate over each column
                for (int i = 0; i < columns.Count; i++)
                {
                    //Get Column
                    DbColumn column = columns[i];
                    //Add Result
                    if (!result.ContainsKey(column.ColumnName))
                    {
                        result.Add(column.ColumnName, values[i]);
                    }
                }
                //Add Result to Results
                results.Add(result);
            }
            //Close Connection
            await connection.CloseAsync();

            //Return Results
            return(results.ToArray());
        }