using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Data; using System.Data.OleDb; using System.Data.Odbc; namespace ScientificDistance { public class Database : IDisposable { OdbcConnection Connection; public string DSN; /// /// Establish a connection with an ODBC data source /// /// HandGeneratedData source to connect to public Database(string DSN) { Connection = new OdbcConnection("DSN=" + DSN + ";"); Connection.Open(); this.DSN = DSN; } /// /// Execute a query that does not return a table /// /// SQL query to execute /// Number of rows affected public virtual int ExecuteNonQuery(string SQL) { OdbcCommand Command; Command = new OdbcCommand(SQL, Connection); return Command.ExecuteNonQuery(); } /// /// Execute a query that does not return a table /// /// SQL query to execute /// List of OdbcParameter objects /// Number of rows affected public virtual int ExecuteNonQuery(string SQL, List Parameters) { OdbcCommand Command; Command = new OdbcCommand(SQL, Connection); for (int i = 0; i < Parameters.Count; i++) Command.Parameters.Add(Parameters[i]); return Command.ExecuteNonQuery(); } /// /// Execute a query that returns a table /// /// SQL query to execute /// Returns a DataTable containing the results of the query public virtual DataTable ExecuteQuery(string SQL) { OdbcDataAdapter Query = new OdbcDataAdapter(SQL, Connection); DataTable Table = new DataTable(); Query.Fill(Table); return Table; } /// /// Execute a query that returns a table /// /// SQL query to execute /// List of OdbcParameter objects /// Returns a DataTable containing the results of the query public virtual DataTable ExecuteQuery(string SQL, List Parameters) { OdbcCommand Command = new OdbcCommand(SQL, Connection); for (int i = 0; i < Parameters.Count; i++) Command.Parameters.Add(Parameters[i]); OdbcDataAdapter Query = new OdbcDataAdapter(Command); DataTable Table = new DataTable(); Query.Fill(Table); return Table; } /// /// Execute a query that returns a scalar /// /// SQL query to execute /// Returns an object containing the results of the query public virtual object ExecuteScalar(string SQL) { OdbcCommand Command = new OdbcCommand(SQL, Connection); return Command.ExecuteScalar(); } /// /// Get a string from the database /// /// SQL query to execute /// Returns a string containing the results of the query public virtual string GetStringValue(string SQL) { OdbcCommand Command = new OdbcCommand(SQL, Connection); return Command.ExecuteScalar().ToString(); } /// /// Get an int from the database /// /// SQL query to execute /// Returns an int containing the results of the query public virtual int GetIntValue(string SQL) { OdbcCommand Command = new OdbcCommand(SQL, Connection); return Convert.ToInt32(Command.ExecuteScalar().ToString()); } /// /// Get an int from the database /// /// SQL query to execute /// List of OdbcParameter objects /// Returns an int containing the results of the query public virtual int GetIntValue(string SQL, List Parameters) { OdbcCommand Command; Command = new OdbcCommand(SQL, Connection); for (int i = 0; i < Parameters.Count; i++) Command.Parameters.Add(Parameters[i]); return Convert.ToInt32(Command.ExecuteScalar().ToString()); } /// /// Create an OdbcParameter /// /// Object to pass to a query /// An OdbcParameter object that has the value Objct public static OdbcParameter Parameter(object Object) { if (Object == null) return new OdbcParameter("", DBNull.Value); else return new OdbcParameter("", Object); } /// /// Trim a string to a given length, but only if it's greater than that length /// /// String to trim /// Maximum length of the string /// Trimmed string public static string Left(string Input, int Length) { if (Input == null) return null; else if (Input.Length > Length) return Input.Substring(0, Length); else return Input; } #region IDisposable Members public void Dispose() { Close(); } /// /// Close the database /// public void Close() { if (Connection != null) Connection.Close(); Connection = null; } #endregion } }