namespace Otaku { using System; using System.Collections; using System.Data; using System.Data.Odbc; using System.Threading; public static class DB { private static OdbcConnection dbConnection; private static string strConnection; public static bool checkExists(string Query) { try { return new OdbcCommand(Query + " LIMIT 1", dbConnection).ExecuteReader().HasRows; } catch (Exception exception) { Out.WriteError("Error '" + exception.Message + "' at '" + Query + "'"); return false; } } public static void closeConnection() { Out.WriteLine("Closing database connection..."); try { dbConnection.Close(); Out.WriteLine("Database connection closed."); } catch { Out.WriteLine("No database connection."); } } private static void dbConnection_StateChange(object sender, StateChangeEventArgs ev) { if (ev.CurrentState == ConnectionState.Broken) { Thread.Sleep(0x3e8); dbConnection.Close(); } if (ev.CurrentState == ConnectionState.Closed) { Thread.Sleep(0x3e8); Out.WriteLine("Reconnecting to SQL Server 1..."); dbConnection = new OdbcConnection(strConnection); dbConnection.StateChange += new StateChangeEventHandler(DB.dbConnection_StateChange); Thread.Sleep(0x3e8); dbConnection.Open(); Out.WriteLine("Reconnection to database 1 successful."); } } public static bool openConnection(string dbHost, int dbPort, string dbName, string dbUsername, string dbPassword) { try { if (dbName != "otakudb_phoenixhotel") { Out.WriteLine(string.Concat(new object[] { "Connecting to ", dbName, " at ", dbHost, ":", dbPort, " for user '", dbUsername, "'" })); } strConnection = string.Concat(new object[] { "Driver={MySQL ODBC 5.1 Driver};Server=", dbHost, ";Port=", dbPort, ";Database=", dbName, ";User=", dbUsername, ";Password=", dbPassword, ";Option=3;" }); dbConnection = new OdbcConnection(strConnection); dbConnection.StateChange += new StateChangeEventHandler(DB.dbConnection_StateChange); dbConnection.Open(); if (dbName != "otakudb_phoenixhotel") { Out.WriteLine("Connection to database successfull."); } return true; } catch (Exception exception) { if (dbName != "otakudb_phoenixhotel") { Out.WriteError("Failed to connect! Error thrown was: " + exception.Message); } return false; } } public static void runQuery(string Query) { try { new OdbcCommand(Query, dbConnection).ExecuteScalar(); } catch (Exception exception) { Out.WriteError("Error '" + exception.Message + "' at '" + Query + "'"); } } public static string runRead(string Query) { try { return new OdbcCommand(Query + " LIMIT 1", dbConnection).ExecuteScalar().ToString(); } catch (Exception exception) { Out.WriteError("Error '" + exception.Message + "' at '" + Query + "'"); return ""; } } public static int runRead(string Query, object Tick) { try { return Convert.ToInt32(new OdbcCommand(Query + " LIMIT 1", dbConnection).ExecuteScalar()); } catch (Exception exception) { Out.WriteError("Error '" + exception.Message + "' at '" + Query + "'"); return 0; } } public static string[] runReadColumn(string Query, int maxResults) { if (maxResults > 0) { Query = Query + " LIMIT " + maxResults; } try { ArrayList list = new ArrayList(); OdbcDataReader reader = new OdbcCommand(Query, dbConnection).ExecuteReader(); while (reader.Read()) { try { list.Add(reader[0].ToString()); continue; } catch { list.Add(""); continue; } } reader.Close(); return (string[]) list.ToArray(typeof(string)); } catch (Exception exception) { Out.WriteError("Error '" + exception.Message + "' at '" + Query + "'"); return new string[0]; } } public static int[] runReadColumn(string Query, int maxResults, object Tick) { if (maxResults > 0) { Query = Query + " LIMIT " + maxResults; } try { ArrayList list = new ArrayList(); OdbcDataReader reader = new OdbcCommand(Query, dbConnection).ExecuteReader(); while (reader.Read()) { try { list.Add(reader.GetInt32(0)); continue; } catch { list.Add(0); continue; } } reader.Close(); return (int[]) list.ToArray(typeof(int)); } catch (Exception exception) { Out.WriteError("Error '" + exception.Message + "' at '" + Query + "'"); return new int[0]; } } public static string[] runReadRow(string Query) { try { ArrayList list = new ArrayList(); OdbcDataReader reader = new OdbcCommand(Query + " LIMIT 1", dbConnection).ExecuteReader(); while (reader.Read()) { for (int i = 0; i < reader.FieldCount; i++) { try { list.Add(reader[i].ToString()); } catch { list.Add(""); } } } reader.Close(); return (string[]) list.ToArray(typeof(string)); } catch (Exception exception) { Out.WriteError("Error '" + exception.Message + "' at '" + Query + "'"); return new string[0]; } } public static int[] runReadRow(string Query, object Tick) { try { ArrayList list = new ArrayList(); OdbcDataReader reader = new OdbcCommand(Query + " LIMIT 1", dbConnection).ExecuteReader(); while (reader.Read()) { for (int i = 0; i < reader.FieldCount; i++) { try { list.Add(reader.GetInt32(i)); } catch { list.Add(0); } } } reader.Close(); return (int[]) list.ToArray(typeof(int)); } catch (Exception exception) { Out.WriteError("Error '" + exception.Message + "' at '" + Query + "'"); return new int[0]; } } public static string runReadUnsafe(string Query) { try { return new OdbcCommand(Query + " LIMIT 1", dbConnection).ExecuteScalar().ToString(); } catch { return ""; } } public static int runReadUnsafe(string Query, object Tick) { try { return Convert.ToInt32(new OdbcCommand(Query + " LIMIT 1", dbConnection).ExecuteScalar()); } catch { return 0; } } public static string Stripslash(string Query) { try { return Query.Replace(@"\", @"\").Replace("'", @"\'"); } catch { return ""; } } } }