El problema al que te enfrentas es que te has codificado a ti mismo en una esquina de "nueva conexión por acción". A lo que realmente quiere apuntar, y se considera una mejor práctica, es "nueva conexión por lote de acciones".
Lo que recomiendo en este caso es abrir la conexión cuando sea necesario y cerrarla cuando se deseche. Lo que haremos será mover los adaptadores odbc a una variable de mayor alcance para que se pueda acceder a ella dentro de la clase.
namespace databaseFunctions
{
public class databaseConnection:IDisposable
{
private OdbcConnection con;
private string connectionString;
public databaseConnection(string connectionString){
this.connectionString = connectionString;
}
public void OpenConnection(){
if (con == null || con.IsClosed ){ // we make sure we're only opening connection once.
con = new OdbcConnection(this.connectionString);
}
}
public void CloseConnection(){
if (con != null && con.IsOpen){ // I'm making stuff up here
con.Close();
}
}
public DataTable getFromDatabase(string SQL)
{
OpenConnection();
DataTable rt = new DataTable();
DataSet ds = new DataSet();
OdbcCommand cmd = new OdbcCommand(SQL, con);
da.SelectCommand = cmd;
da.Fill(ds);
try
{
rt = ds.Tables[0];
}
catch
{
rt = null;
}
return rt;
}
public Boolean insertIntoDatabase(string SQL)
{
OpenConnection();
OdbcCommand cmd = new OdbcCommand(SQL, con);
con.Open();
try
{
cmd.ExecuteNonQuery();
return true;
}
catch
{
return false;
}
}
// Implementing IDisposable method
public void Dispose(){
CloseConenction();
}
}
}
Ahora, la próxima vez que uses tu clase, haz algo como
using (DatabaseConnection db = new DatabaseConnection()){
db.InsertIntoDatabase(...);
db.GetLastInsertID();
db.GetFromDatabase(...);
}
Al final de ese bloque de código, debido a que es IDisposeable, cerrará esa conexión por ti en el método dispose.
Cosas que cambié:
- implementado IDisposable interfaz
- cambió los métodos de estáticos a métodos de clase.
- se agregaron nuevos métodos para abrir y cerrar la conexión
- variable de conexión movida al ámbito de nivel de clase
- añadió un argumento al constructor que le permite pasar una cadena de conexión (debe poner esta cadena de conexión en su Web.Config
Ediciones:
- constructor toma connectionString por sugerencia.