Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using MySql.Data.MySqlClient;
- using System;
- using System.Data;
- using System.Threading.Tasks;
- namespace PandaServer
- {
- public class DBManager
- {
- public string Username { get; private set; }
- public string Password { get; private set; }
- public string DBName { get; private set; }
- public MySqlConnection Connection { get; private set; }
- public bool Connected { get; private set; }
- private readonly string ConnectionString;
- public DBManager(string username, string password, string dbName)
- {
- this.Username = username;
- this.Password = password;
- this.DBName = dbName;
- this.ConnectionString = String.Format("server=localhost;user={0};database={1};port=3306;password={2};", username, dbName, password);
- this.Connection = new MySqlConnection(this.ConnectionString);
- }
- public async Task<int> ConnectAsync()
- {
- try
- {
- await this.Connection.OpenAsync();
- this.Connected = true;
- return 1;
- }
- catch (AggregateException)
- {
- this.Connected = false;
- return -1;
- }
- }
- public void CloseConnection()
- {
- try
- {
- this.Connection.Close();
- }
- finally
- {
- this.Connection = null;
- this.DBName = null;
- this.Password = null;
- this.Username = null;
- }
- }
- private static async Task<DataTable> query_Internal(MySqlCommand cmd)
- {
- return await Task.Run(() => {
- var table = new DataTable();
- using (var adapter = new MySqlDataAdapter(cmd))
- adapter.Fill(table);
- return table;
- });
- }
- public async Task<DataTable> Query(string query)
- {
- //var dataReader = await CreateCommand(query).ExecuteReaderAsync();
- using (var cmd = CreateCommand(query))
- return await query_Internal(cmd);
- }
- public async Task<DataTable> Query(string query, string[] parameterNames, object[] values)
- {
- using (var cmd = CreateCommand(query, parameterNames, values))
- return await query_Internal(cmd);
- }
- public async Task ExecuteNonQuery(string command)
- {
- using (var cmd = CreateCommand(command))
- await cmd.ExecuteNonQueryAsync();
- }
- public async Task ExecuteNonQuery(string command, string[] parameterNames, object[] values)
- {
- using (var cmd = CreateCommand(command))
- {
- for (int i = 0; i < parameterNames.Length; i++)
- cmd.Parameters.AddWithValue(parameterNames[i], values[i]);
- await cmd.ExecuteNonQueryAsync();
- }
- }
- public async Task<T> ExecuteLinear<T>(string command) where T : class
- {
- using (var cmd = CreateCommand(command))
- return await cmd.ExecuteScalarAsync() as T;
- }
- public async Task<object> ExecuteLinear(string cmd)
- {
- return await CreateCommand(cmd).ExecuteScalarAsync();
- }
- private MySqlCommand CreateCommand(string q)
- {
- return new MySqlCommand(q, this.Connection);
- }
- public MySqlCommand CreateCommand(string q, string[] names, object[] values)
- {
- if ((names == null || values == null) || (names.Length != values.Length) || names.Length <= 0) throw new ArgumentException();
- MySqlCommand command = CreateCommand (q);
- for (int i = 0; i < names.Length; i++)
- command.Parameters.AddWithValue(names[i], values[i]);
- return command;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment