Barney

MySQL Manager Class

Aug 10th, 2013
1,355
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 3.99 KB | None | 0 0
  1. using MySql.Data.MySqlClient;
  2. using System;
  3. using System.Data;
  4. using System.Threading.Tasks;
  5.  
  6. namespace PandaServer
  7. {
  8.     public class DBManager
  9.     {
  10.         public string Username { get; private set; }
  11.         public string Password { get; private set; }
  12.         public string DBName { get; private set; }
  13.         public MySqlConnection Connection { get; private set; }
  14.         public bool Connected { get; private set; }
  15.         private readonly string ConnectionString;
  16.  
  17.         public DBManager(string username, string password, string dbName)
  18.         {
  19.             this.Username = username;
  20.             this.Password = password;
  21.             this.DBName = dbName;
  22.             this.ConnectionString = String.Format("server=localhost;user={0};database={1};port=3306;password={2};", username, dbName, password);
  23.             this.Connection = new MySqlConnection(this.ConnectionString);
  24.         }
  25.  
  26.         public async Task<int> ConnectAsync()
  27.         {
  28.             try
  29.             {
  30.                 await this.Connection.OpenAsync();
  31.                 this.Connected = true;
  32.                 return 1;
  33.             }
  34.             catch (AggregateException)
  35.             {
  36.                 this.Connected = false;
  37.                 return -1;
  38.             }
  39.         }
  40.         public void CloseConnection()
  41.         {
  42.             try
  43.             {
  44.                 this.Connection.Close();
  45.             }
  46.             finally
  47.             {
  48.                 this.Connection = null;
  49.                 this.DBName = null;
  50.                 this.Password = null;
  51.                 this.Username = null;
  52.             }
  53.         }
  54.  
  55.         private static async Task<DataTable> query_Internal(MySqlCommand cmd)
  56.         {
  57.             return await Task.Run(() => {
  58.                 var table = new DataTable();
  59.                 using (var adapter = new MySqlDataAdapter(cmd))
  60.                     adapter.Fill(table);
  61.                 return table;
  62.             });
  63.         }
  64.  
  65.         public async Task<DataTable> Query(string query)
  66.         {
  67.             //var dataReader = await CreateCommand(query).ExecuteReaderAsync();
  68.            
  69.             using (var cmd = CreateCommand(query))
  70.                 return await query_Internal(cmd);
  71.         }
  72.         public async Task<DataTable> Query(string query, string[] parameterNames, object[] values)
  73.         {
  74.             using (var cmd = CreateCommand(query, parameterNames, values))
  75.                 return await query_Internal(cmd);
  76.         }
  77.  
  78.         public async Task ExecuteNonQuery(string command)
  79.         {
  80.             using (var cmd = CreateCommand(command))
  81.                 await cmd.ExecuteNonQueryAsync();
  82.         }
  83.         public async Task ExecuteNonQuery(string command, string[] parameterNames, object[] values)
  84.         {
  85.             using (var cmd = CreateCommand(command))
  86.             {
  87.                 for (int i = 0; i < parameterNames.Length; i++)
  88.                     cmd.Parameters.AddWithValue(parameterNames[i], values[i]);
  89.                 await cmd.ExecuteNonQueryAsync();
  90.             }
  91.         }
  92.         public async Task<T> ExecuteLinear<T>(string command) where T : class
  93.         {
  94.             using (var cmd = CreateCommand(command))
  95.                 return await cmd.ExecuteScalarAsync() as T;
  96.         }
  97.         public async Task<object> ExecuteLinear(string cmd)
  98.         {
  99.             return await CreateCommand(cmd).ExecuteScalarAsync();
  100.         }
  101.  
  102.         private MySqlCommand CreateCommand(string q)
  103.         {
  104.             return new MySqlCommand(q, this.Connection);
  105.         }
  106.         public MySqlCommand CreateCommand(string q, string[] names, object[] values)
  107.         {
  108.             if ((names == null || values == null) || (names.Length != values.Length) || names.Length <= 0) throw new ArgumentException();
  109.  
  110.             MySqlCommand command = CreateCommand (q);
  111.             for (int i = 0; i < names.Length; i++)
  112.                 command.Parameters.AddWithValue(names[i], values[i]);
  113.             return command;
  114.         }
  115.     }
  116. }
Advertisement
Add Comment
Please, Sign In to add comment