so I created a database manager and wanted to know if I could improove it in any way? Thanks.
DatabaseManager.cs:
using MySql.Data.MySqlClient;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Sahara.Core.Database
{
class DatabaseManager
{
private readonly DatabaseSettings databaseSettings;
private readonly string connectionString;
public DatabaseManager(DatabaseSettings databaseSettings)
{
this.databaseSettings = databaseSettings;
MySqlConnectionStringBuilder mysqlConnectionString = new MySqlConnectionStringBuilder
{
ConnectionLifeTime = (60 * 5),
ConnectionTimeout = 30,
Database = databaseSettings.DatabaseName,
DefaultCommandTimeout = 120,
Logging = false,
MaximumPoolSize = databaseSettings.MaximumConnections,
MinimumPoolSize = 3,
Password = databaseSettings.DatabasePassword,
Pooling = true,
Port = 3306,
Server = databaseSettings.DatabaseHost,
UseCompression = false,
UserID = databaseSettings.DatabaseUsername
};
this.connectionString = mysqlConnectionString.ToString();
}
public bool ValidConnection()
{
try
{
using (var databaseConnection = GetDatabaseConnection())
{
databaseConnection.OpenConnection();
databaseConnection.SetQuery("SELECT 1+1;");
databaseConnection.RunQuery();
}
}
catch (MySqlException)
{
return false;
}
return true;
}
public DatabaseConnection GetDatabaseConnection()
{
return new DatabaseConnection(connectionString);
}
}
}
DatabaseConnection.cs:
using MySql.Data.MySqlClient;
using Sahara.Core.Logging;
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Sahara.Core.Database
{
class DatabaseConnection : IDisposable
{
private MySqlConnection mysqlConnection;
private MySqlCommand mysqlCommand;
private MySqlTransaction mysqlTransaction;
private List<MySqlParameter> mysqlParameters;
private DateTime startTime;
public DatabaseConnection(string ConnectionStr)
{
this.mysqlConnection = new MySqlConnection(ConnectionStr);
this.mysqlCommand = this.mysqlConnection.CreateCommand();
}
public void OpenConnection()
{
if (this.mysqlConnection.State == ConnectionState.Open)
{
throw new InvalidOperationException("Connection already open.");
}
this.mysqlConnection.Open();
this.startTime = DateTime.Now;
}
public bool IsConnectionOpen()
{
return this.mysqlConnection.State == ConnectionState.Open;
}
public void AddParameter(string param, object value)
{
if (this.mysqlParameters == null) { this.mysqlParameters = new List<MySqlParameter>(); }
this.mysqlParameters.Add(new MySqlParameter(param, value));
}
public void SetQuery(string Query)
{
this.mysqlCommand.Parameters.Clear();
this.mysqlCommand.CommandText = Query;
}
public void RunQuery(string query)
{
SetQuery(query);
RunQuery();
}
public void RunQuery()
{
try
{
mysqlCommand.ExecuteNonQuery();
}
catch (Exception exception)
{
Sahara.GetServer().GetLogManager().Log("MySQL Error: " + exception.Message, LogType.Error);
throw exception;
}
}
public DataTable getTable()
{
var dataTable = new DataTable();
try
{
using (MySqlDataAdapter adapter = new MySqlDataAdapter(mysqlCommand))
{
adapter.Fill(dataTable);
}
}
catch (Exception exception)
{
Sahara.GetServer().GetLogManager().Log("MySQL Error: " + exception.Message, LogType.Error);
}
return dataTable;
}
public int getInteger()
{
int result = 0;
try
{
object obj2 = mysqlCommand.ExecuteScalar();
if (obj2 != null)
{
int.TryParse(obj2.ToString(), out result);
}
}
catch (Exception exception)
{
Sahara.GetServer().GetLogManager().Log("MySQL Error: " + exception.Message, LogType.Error);
}
return result;
}
public string getString()
{
string str = string.Empty;
try
{
object obj2 = mysqlCommand.ExecuteScalar();
if (obj2 != null)
{
str = obj2.ToString();
}
}
catch (Exception exception)
{
Sahara.GetServer().GetLogManager().Log("MySQL Error: " + exception.Message, LogType.Error);
}
return str;
}
public DataRow getRow()
{
DataRow row = null;
try
{
DataSet dataSet = new DataSet();
using (MySqlDataAdapter adapter = new MySqlDataAdapter(mysqlCommand))
{
adapter.Fill(dataSet);
}
if ((dataSet.Tables.Count > 0) && (dataSet.Tables[0].Rows.Count == 1))
{
row = dataSet.Tables[0].Rows[0];
}
}
catch (Exception exception)
{
Sahara.GetServer().GetLogManager().Log("MySQL Error: " + exception.Message, LogType.Error);
}
return row;
}
public void Dispose()
{
if (this.mysqlConnection.State == ConnectionState.Open)
{
this.mysqlConnection.Close();
this.mysqlConnection = null;
}
if (this.mysqlParameters != null)
{
this.mysqlParameters.Clear();
this.mysqlParameters = null;
}
if (this.mysqlTransaction != null)
{
this.mysqlTransaction.Dispose();
this.mysqlTransaction = null;
}
if (this.mysqlCommand != null)
{
this.mysqlCommand.Dispose();
this.mysqlCommand = null;
}
int Finish = (DateTime.Now - startTime).Milliseconds;
Sahara.GetServer().GetLogManager().Log("Query completed in " + Finish + "ms", LogType.Information);
}
}
}
DatabaseSettings.cs:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Sahara.Core.Database
{
class DatabaseSettings
{
public string DatabaseHost
{
get;
set;
}
public string DatabaseUsername
{
get;
set;
}
public string DatabasePassword
{
get;
set;
}
public string DatabaseName
{
get;
set;
}
public uint DatabasePort
{
get;
set;
}
public uint MaximumConnections
{
get;
set;
}
}
}