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
}
}