Change try catch blocks to include openning of connection.

This commit is contained in:
hondacrx
2017-07-08 23:31:02 -04:00
parent 23e9a60d6d
commit 9a33ac4319
+82 -79
View File
@@ -65,18 +65,18 @@ namespace Framework.Database
_connectionInfo = new MySqlConnectionInfo(connectionObject); _connectionInfo = new MySqlConnectionInfo(connectionObject);
_updater = new DatabaseUpdater<T>(this); _updater = new DatabaseUpdater<T>(this);
using (var connection = _connectionInfo.GetConnection()) try
{ {
try using (var connection = _connectionInfo.GetConnection())
{ {
connection.Open(); connection.Open();
Log.outInfo(LogFilter.SqlDriver, "Connected to MySQL(ver: {0}) Database: {1}", connection.ServerVersion, _connectionInfo.Database); Log.outInfo(LogFilter.SqlDriver, "Connected to MySQL(ver: {0}) Database: {1}", connection.ServerVersion, _connectionInfo.Database);
return MySqlErrorCode.None; return MySqlErrorCode.None;
} }
catch (MySqlException ex) }
{ catch (MySqlException ex)
return (MySqlErrorCode)((MySqlException)ex.InnerException).Number; {
} return HandleMySQLException(ex);
} }
} }
@@ -86,12 +86,12 @@ namespace Framework.Database
} }
public void Execute(PreparedStatement stmt) public void Execute(PreparedStatement stmt)
{ {
using (var Connection = _connectionInfo.GetConnection()) try
{ {
Connection.Open(); using (var Connection = _connectionInfo.GetConnection())
using (MySqlCommand cmd = Connection.CreateCommand())
{ {
try Connection.Open();
using (MySqlCommand cmd = Connection.CreateCommand())
{ {
cmd.CommandText = stmt.CommandText; cmd.CommandText = stmt.CommandText;
foreach (var parameter in stmt.Parameters) foreach (var parameter in stmt.Parameters)
@@ -99,12 +99,12 @@ namespace Framework.Database
cmd.ExecuteNonQuery(); cmd.ExecuteNonQuery();
} }
catch (MySqlException ex)
{
HandleMySQLException(ex, stmt.CommandText);
}
} }
} }
catch (MySqlException ex)
{
HandleMySQLException(ex, stmt.CommandText);
}
} }
public void ExecuteOrAppend(SQLTransaction trans, PreparedStatement stmt) public void ExecuteOrAppend(SQLTransaction trans, PreparedStatement stmt)
@@ -123,13 +123,14 @@ namespace Framework.Database
public SQLResult Query(PreparedStatement stmt) public SQLResult Query(PreparedStatement stmt)
{ {
List<object[]> rows = new List<object[]>(); List<object[]> rows = new List<object[]>();
using (var Connection = _connectionInfo.GetConnection()) try
{ {
Connection.Open(); using (var Connection = _connectionInfo.GetConnection())
using (MySqlCommand cmd = Connection.CreateCommand())
{ {
try Connection.Open();
using (MySqlCommand cmd = Connection.CreateCommand())
{ {
cmd.CommandText = stmt.CommandText; cmd.CommandText = stmt.CommandText;
foreach (var parameter in stmt.Parameters) foreach (var parameter in stmt.Parameters)
cmd.Parameters.AddWithValue("@" + parameter.Key, parameter.Value); cmd.Parameters.AddWithValue("@" + parameter.Key, parameter.Value);
@@ -149,12 +150,13 @@ namespace Framework.Database
} }
} }
} }
catch (MySqlException ex)
{
HandleMySQLException(ex, stmt.CommandText);
}
} }
} }
catch (MySqlException ex)
{
HandleMySQLException(ex, stmt.CommandText);
}
return new SQLResult(rows); return new SQLResult(rows);
} }
@@ -177,7 +179,7 @@ namespace Framework.Database
{ {
using (var Connection = _connectionInfo.GetConnection()) using (var Connection = _connectionInfo.GetConnection())
{ {
Connection.Open(); await Connection.OpenAsync();
using (MySqlCommand cmd = Connection.CreateCommand()) using (MySqlCommand cmd = Connection.CreateCommand())
{ {
cmd.CommandText = stmt.CommandText; cmd.CommandText = stmt.CommandText;
@@ -186,7 +188,7 @@ namespace Framework.Database
using (var reader = await cmd.ExecuteReaderAsync()) using (var reader = await cmd.ExecuteReaderAsync())
{ {
if (reader.Read() && reader.HasRows) if (await reader.ReadAsync() && reader.HasRows)
{ {
do do
{ {
@@ -195,7 +197,7 @@ namespace Framework.Database
reader.GetValues(row); reader.GetValues(row);
rows.Add(row); rows.Add(row);
} }
while (reader.Read()); while (await reader.ReadAsync());
} }
} }
} }
@@ -211,54 +213,51 @@ namespace Framework.Database
public async Task<SQLQueryHolder<R>> DelayQueryHolder<R>(SQLQueryHolder<R> holder) public async Task<SQLQueryHolder<R>> DelayQueryHolder<R>(SQLQueryHolder<R> holder)
{ {
return await Task.Run(async () => string query = "";
try
{ {
string query = ""; using (var Connection = _connectionInfo.GetConnection())
try
{ {
using (var Connection = _connectionInfo.GetConnection()) await Connection.OpenAsync();
foreach (var pair in holder.m_queries)
{ {
Connection.Open(); List<object[]> rows = new List<object[]>();
using (MySqlCommand cmd = Connection.CreateCommand())
foreach (var pair in holder.m_queries)
{ {
List<object[]> rows = new List<object[]>(); cmd.CommandText = pair.Value.stmt.CommandText;
using (MySqlCommand cmd = Connection.CreateCommand()) foreach (var parameter in pair.Value.stmt.Parameters)
cmd.Parameters.AddWithValue("@" + parameter.Key, parameter.Value);
query = cmd.CommandText;
using (var reader = await cmd.ExecuteReaderAsync())
{ {
cmd.CommandText = pair.Value.stmt.CommandText; if (await reader.ReadAsync() && reader.HasRows)
foreach (var parameter in pair.Value.stmt.Parameters)
cmd.Parameters.AddWithValue("@" + parameter.Key, parameter.Value);
query = cmd.CommandText;
using (var reader = await cmd.ExecuteReaderAsync())
{ {
if (reader.Read() && reader.HasRows) do
{ {
do var row = new object[reader.FieldCount];
{
var row = new object[reader.FieldCount];
reader.GetValues(row); reader.GetValues(row);
rows.Add(row); rows.Add(row);
}
while (reader.Read());
} }
while (await reader.ReadAsync());
} }
} }
holder.SetResult(pair.Key, new SQLResult(rows));
} }
}
return holder; holder.SetResult(pair.Key, new SQLResult(rows));
}
} }
catch (MySqlException ex)
{ return holder;
HandleMySQLException(ex, query); }
return holder; catch (MySqlException ex)
} {
}); HandleMySQLException(ex, query);
return holder;
}
} }
public void LoadPreparedStatements() public void LoadPreparedStatements()
@@ -288,44 +287,46 @@ namespace Framework.Database
public bool Apply(string sql) public bool Apply(string sql)
{ {
using (var Connection = _connectionInfo.GetConnectionNoDatabase()) try
{ {
using (MySqlCommand cmd = Connection.CreateCommand()) using (var Connection = _connectionInfo.GetConnectionNoDatabase())
{ {
try using (MySqlCommand cmd = Connection.CreateCommand())
{ {
Connection.Open(); Connection.Open();
cmd.CommandText = sql; cmd.CommandText = sql;
return cmd.ExecuteNonQuery() > 0; return cmd.ExecuteNonQuery() > 0;
} }
catch (MySqlException ex)
{
HandleMySQLException(ex, sql);
return false;
}
} }
} }
catch (MySqlException ex)
{
HandleMySQLException(ex, sql);
return false;
}
} }
public bool ApplyFile(string path) public bool ApplyFile(string path)
{ {
using (var connection = _connectionInfo.GetConnection()) try
{ {
using (MySqlCommand cmd = connection.CreateCommand()) using (var connection = _connectionInfo.GetConnection())
{ {
try using (MySqlCommand cmd = connection.CreateCommand())
{ {
connection.Open(); connection.Open();
cmd.CommandText = File.ReadAllText(path); cmd.CommandText = File.ReadAllText(path);
return cmd.ExecuteNonQuery() > 0; return cmd.ExecuteNonQuery() > 0;
}
catch (MySqlException ex)
{
HandleMySQLException(ex, path);
return false;
} }
} }
} }
catch (MySqlException ex)
{
HandleMySQLException(ex, path);
return false;
}
} }
public void EscapeString(ref string str) public void EscapeString(ref string str)
@@ -338,6 +339,7 @@ namespace Framework.Database
using (var Connection = _connectionInfo.GetConnection()) using (var Connection = _connectionInfo.GetConnection())
{ {
string query = ""; string query = "";
Connection.Open(); Connection.Open();
using (MySqlTransaction trans = Connection.BeginTransaction()) using (MySqlTransaction trans = Connection.BeginTransaction())
{ {
@@ -366,13 +368,13 @@ namespace Framework.Database
} }
} }
void HandleMySQLException(MySqlException ex, string query) MySqlErrorCode HandleMySQLException(MySqlException ex, string query = "")
{ {
int code = ex.Number; MySqlErrorCode code = (MySqlErrorCode)ex.Number;
if (ex.InnerException != null) if (ex.InnerException != null)
code = ((MySqlException)ex.InnerException).Number; code = (MySqlErrorCode)((MySqlException)ex.InnerException).Number;
switch ((MySqlErrorCode)code) switch (code)
{ {
case MySqlErrorCode.BadFieldError: case MySqlErrorCode.BadFieldError:
case MySqlErrorCode.NoSuchTable: case MySqlErrorCode.NoSuchTable:
@@ -384,6 +386,7 @@ namespace Framework.Database
} }
Log.outError(LogFilter.Sql, "SqlException: {0} SqlQuery: {1}", ex.Message, query); Log.outError(LogFilter.Sql, "SqlException: {0} SqlQuery: {1}", ex.Message, query);
return code;
} }
public DatabaseUpdater<T> GetUpdater() public DatabaseUpdater<T> GetUpdater()