Estoy iniciando un proyecto de ASP.NET con MVC y C#, no soy muy habilidoso con esto de C# asi que recurro a los que saben.
He buscado en internet una clase para poder controlar mi conexion a la BDD, ya tengo en mi archivo web.config las cadenas de conexion que necesitare. El inconveniente viene a raiz de optimizar recursos es decir me gustaria hacer una funcion llamada por ejemplo getConexion() y quiza pasar a getConexion un parametro que determine que base ocupare.
No he encontrado una forma de hacerlo, realize un ejemplo bastante sencillo pero no le veo utilidad ya que siempre en cada controlador estaria creando una funcion getConexion().
Aca el ejemplo:
Mi Modelo
Código ASP:
Ver original
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Configuration; using IBM.Data.Informix; namespace Clientes.Models { public class Home { private bool cnx_open; private IfxConnection dbh; public string PersonID { get; set; } public string Name { get; set; } public Home(string arg_id) { GetConnection(); PersonID = arg_id; try { IfxCommand cmd = new IfxCommand(); cmd.Connection = dbh; cmd.CommandText =string.Format("select bodega from almacen where id_bodega = '{0}'", PersonID); IfxDataReader reader = cmd.ExecuteReader(); try { reader.Read(); if (reader.IsDBNull(0) == false) Name = reader.GetString(0)+" "+PersonID; else Name = null; reader.Close(); } catch (IfxException e) { string MessageString = "Read error occurred / entry not found loading the Column details: "+ e.ErrorCode + " - " + e.Message + "; \n\nPlease Continue"; //MessageBox.Show(MessageString, "SQL Read Error"); reader.Close(); Name = MessageString; } } catch (IfxException e) { string MessageString = "The following error occurred loading the Column details: "+ e.ErrorCode + " - " + e.Message; Name = MessageString; } dbh.Close(); } private void GetConnection() { cnx_open = false; dbh = new IfxConnection(); dbh.ConnectionString = ConfigurationManager.ConnectionStrings["001"].ConnectionString; if (Open_Local_Connection()) { cnx_open = true; } else { //MessageBox::Show("No database connection connection made...\n Exiting now", "Database Connection Error"); //Application::Exit(); } } private bool Open_Local_Connection() { try { dbh.Open(); return true; } catch (Exception e) { return false; } } } }
Mi Controlador
Código ASP:
Ver original
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; using System.Configuration; using IBM.Data.Informix; using Clientes.Models; namespace Clientes.Controllers { public class HomeController : Controller { Home bodega = new Home("1233"); // GET: Home public ActionResult Index() { return View(bodega); } } }
Y por ultimo mi vista
Código ASP:
Ver original
@model Clientes.Models.Home @{ //ViewBag.Title = ".:: Titulo ::."; } <h2>Prueba</h2> <p>Nombre: @Model.Name</p>
Como ven hay un metodo que obtiene la conexion GetConnection() este se invoca en el metodo necesario pero siempre y cuando este dentro del mismo controlador.
Lo que quiero es una solucion global para llamar solo GetConnection() .
Espera de orientacion.
Saludos.