Foros del Web » Programando para Internet » ASPX (.net) »

Clase para cargar la conexión SQL al principio de la aplicación

Estas en el tema de Clase para cargar la conexión SQL al principio de la aplicación en el foro de ASPX (.net) en Foros del Web. Hola. ¿Es buena idea hacer esto para ASP.Net?¿Puede dar lugar a muchos errores en las conexiones? global.asax Código: Sub Application_Start(ByVal sender As Object, ByVal e ...
  #1 (permalink)  
Antiguo 14/12/2005, 08:29
Avatar de Bravenap  
Fecha de Ingreso: noviembre-2002
Ubicación: Los Arroyos, El Escorial, Madrid
Mensajes: 2.084
Antigüedad: 21 años, 5 meses
Puntos: 4
Clase para cargar la conexión SQL al principio de la aplicación

Hola. ¿Es buena idea hacer esto para ASP.Net?¿Puede dar lugar a muchos errores en las conexiones?

global.asax
Código:
    Sub Application_Start(ByVal sender As Object, ByVal e As EventArgs)
        ' Se desencadena cuando se inicia la aplicación
        OrigenDatos.propStrCon = ConfigurationSettings.AppSettings("strcon")
    End Sub
moduloGeneral.vb
Código:
#Region "Conexión a la base de datos"

    Public Class OrigenDatos
        Friend Shared con As SqlConnection
        Private Shared strCon As String

        Shared Sub New()
            con = New SqlConnection
        End Sub 'New

        Friend Shared Sub AsignarCadenaConexion()
            con.ConnectionString = propStrCon
        End Sub 'AsignarCadenaConexion

        Public Shared Property propStrCon() As String
            Get
                Return strCon
            End Get
            Set(ByVal Value As String)
                'validar aquí la cadena de conexión
                strCon = Value
                AsignarCadenaConexion()
            End Set
        End Property

        Public Shared Function Verificar() As Boolean
            Try
                con.Open()
            Catch
            Finally
                con.Close()
            End Try
            Return True
        End Function 'Verificar
    End Class 'OrigenDatos

#End Region
Luego, por ejemplo, en cualquier página pongo:

Código:
            Dim da As New System.Data.SqlClient.SqlDataAdapter("SELECT * FROM ...", OrigenDatos.con)
Un saludo.
__________________
¡¡NO A LA GUERRA!!
Si ponemos a nuestros mensajes títulos adecuados, la gente se animará más a abrirlos y resultarán más útiles en las busquedas. ¡No a los ayuuudaaa, urgenteee y similares!
  #2 (permalink)  
Antiguo 14/12/2005, 09:23
Avatar de Andres95
Colaborador
 
Fecha de Ingreso: diciembre-2004
Mensajes: 1.802
Antigüedad: 19 años, 4 meses
Puntos: 38
A ver que te parece...


un saludo


Microsoft Application Blocks for .NET
  #3 (permalink)  
Antiguo 14/12/2005, 10:00
Avatar de Bravenap  
Fecha de Ingreso: noviembre-2002
Ubicación: Los Arroyos, El Escorial, Madrid
Mensajes: 2.084
Antigüedad: 21 años, 5 meses
Puntos: 4
Suena bastante bien. Lo miraré a conciencia aunque me temo que no lo voy a poder usar ya que me parece que hay que instalar algo en el servidor y eso, bueno, lo de siempre.

Gracias y un saludo.
__________________
¡¡NO A LA GUERRA!!
Si ponemos a nuestros mensajes títulos adecuados, la gente se animará más a abrirlos y resultarán más útiles en las busquedas. ¡No a los ayuuudaaa, urgenteee y similares!
  #4 (permalink)  
Antiguo 14/12/2005, 10:51
Avatar de rodri  
Fecha de Ingreso: febrero-2005
Mensajes: 406
Antigüedad: 19 años, 2 meses
Puntos: 2
La verdad Application Blocks es una de las herramientas mas facilitadoras no solo a acceso a datos sino logging,autenticacion,encriptacion,etc. solo necesitas un archivo.config (en la version de .net 1.1) o tu web.config o app.config (en la version de .net 2.0).
__________________
0.o Rodri
  #5 (permalink)  
Antiguo 14/12/2005, 10:59
Avatar de rodri  
Fecha de Ingreso: febrero-2005
Mensajes: 406
Antigüedad: 19 años, 2 meses
Puntos: 2
ejemplo

Código:
using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Data.Common;
using System.Data.SqlClient;
using Microsoft.Practices.EnterpriseLibrary.Data;
using Microsoft.Practices.EnterpriseLibrary.Common;
using Microsoft.Practices.EnterpriseLibrary.Configuration;
using System.Configuration;

public class Consulta
{
   public DataSet Consultar(string query)
   {
    Database db = DatabaseFactory.CreateDatabase();
    DbCommand comm = db.GetStoredProcCommand(query);
    DataSet ds = db.ExecuteReader(comm);
   return ds;
    }
}
Bueno es algo muy básico, pero con eso ya puedes ejecutar un DataSet. la primera linea del método, crea la conexion a la Base de Datos con un Database, el DbCommand carga mediante el objeto Database la consulta (o el SP) y el mismo db luego ejecuta la consulta poblando el DataSet y cerrando automáticamente la conexion.

Tienes antes que bajarte la libreria del Enterprise Library.

Ojala t sirva. adios
__________________
0.o Rodri
  #6 (permalink)  
Antiguo 15/12/2005, 09:43
Avatar de Bravenap  
Fecha de Ingreso: noviembre-2002
Ubicación: Los Arroyos, El Escorial, Madrid
Mensajes: 2.084
Antigüedad: 21 años, 5 meses
Puntos: 4
Anda, pues parece muy bueno y rápido. Voy a ver si encuentro la librería. Gracias rodri.
__________________
¡¡NO A LA GUERRA!!
Si ponemos a nuestros mensajes títulos adecuados, la gente se animará más a abrirlos y resultarán más útiles en las busquedas. ¡No a los ayuuudaaa, urgenteee y similares!
  #7 (permalink)  
Antiguo 20/12/2005, 08:12
Avatar de Bravenap  
Fecha de Ingreso: noviembre-2002
Ubicación: Los Arroyos, El Escorial, Madrid
Mensajes: 2.084
Antigüedad: 21 años, 5 meses
Puntos: 4
Bueno, pues ya me he descargado la librería y uffffff, menudo tocho, es largo ¿eh? En fin, el problema que veo, que es lo mismo que le comentaba a Andres95, es que esta librería está bien, pero me parece que voy a tener problemas para poder instalarla en el servidor en el que está alojada la aplicación.

Voy a intentar a hacer algo más sencillo con las librerías del .Net Framework y en cuanto lo tenga lo pongo para que le echéis un vistazo.

Gracias y un saludo.
__________________
¡¡NO A LA GUERRA!!
Si ponemos a nuestros mensajes títulos adecuados, la gente se animará más a abrirlos y resultarán más útiles en las busquedas. ¡No a los ayuuudaaa, urgenteee y similares!
  #8 (permalink)  
Antiguo 20/12/2005, 17:51
Avatar de xknown  
Fecha de Ingreso: diciembre-2004
Ubicación: Cusco - Perú
Mensajes: 2.248
Antigüedad: 19 años, 4 meses
Puntos: 7
No es necesario instalar nada, simplemente debes ubicar los binarios de los Building Blocks que uses, en la carpeta bin de tu aplicación.

Saludos
__________________
Alex Concha
Buayacorp - Programación y Diseño
  #9 (permalink)  
Antiguo 21/12/2005, 08:08
Avatar de Bravenap  
Fecha de Ingreso: noviembre-2002
Ubicación: Los Arroyos, El Escorial, Madrid
Mensajes: 2.084
Antigüedad: 21 años, 5 meses
Puntos: 4
Ajá, entiendo, gracias. Y si no me equivoco deben ser los correspondientes a estos:

Microsoft.Practices.EnterpriseLibrary.Data
Microsoft.Practices.EnterpriseLibrary.Common
Microsoft.Practices.EnterpriseLibrary.Configuratio n
__________________
¡¡NO A LA GUERRA!!
Si ponemos a nuestros mensajes títulos adecuados, la gente se animará más a abrirlos y resultarán más útiles en las busquedas. ¡No a los ayuuudaaa, urgenteee y similares!
  #10 (permalink)  
Antiguo 21/12/2005, 22:18
Avatar de xknown  
Fecha de Ingreso: diciembre-2004
Ubicación: Cusco - Perú
Mensajes: 2.248
Antigüedad: 19 años, 4 meses
Puntos: 7
Si no me equivoco también, así es.

Saludos
__________________
Alex Concha
Buayacorp - Programación y Diseño
  #11 (permalink)  
Antiguo 23/12/2005, 18:29
Avatar de RootK
Moderador
 
Fecha de Ingreso: febrero-2002
Ubicación: México D.F
Mensajes: 8.004
Antigüedad: 22 años, 2 meses
Puntos: 50
De hecho esos son, y la verdad es una forma super sencilla y bastante buena de implementacion de patrones de diseño, y funciona tan transparente para otras bases de datos como Oracle, y para la implementacion con mysql tambien es bastante sencilla.

Claro que despues podemos ir combinando los otros app blocks como el security, caching, etc... para nuestras app.

Saludos
__________________
Nadie roba nada ya que en la vida todo se paga . . .

Exentrit - Soluciones SharePoint & Net
  #12 (permalink)  
Antiguo 26/12/2005, 01:49
Avatar de Bravenap  
Fecha de Ingreso: noviembre-2002
Ubicación: Los Arroyos, El Escorial, Madrid
Mensajes: 2.084
Antigüedad: 21 años, 5 meses
Puntos: 4
Je je, la verdad es que me estáis convenciendo. He estado mirando las ejemplos que vienen con la librería, con cieeeeentos de líneas de código y de momento he llegado a una conclusión (toma ya qué listo soy ): hace falta un archivo de configuración para definir los parámetros de la conexión entre otros. Al principio ponía el código de ejemplo que me habíais dado y pensaba ¿cómo sabrá a qué base de datos quiero conectar?

Por cierto, feliz navidad y esas cosas.

Un saludo.
__________________
¡¡NO A LA GUERRA!!
Si ponemos a nuestros mensajes títulos adecuados, la gente se animará más a abrirlos y resultarán más útiles en las busquedas. ¡No a los ayuuudaaa, urgenteee y similares!
  #13 (permalink)  
Antiguo 26/12/2005, 03:11
Avatar de Bravenap  
Fecha de Ingreso: noviembre-2002
Ubicación: Los Arroyos, El Escorial, Madrid
Mensajes: 2.084
Antigüedad: 21 años, 5 meses
Puntos: 4
Bueno, como toda la librería completa me parecía un poco abuso para mi pobre cerebrito resacoso de estas fiestas, me he decidido por usar sólo la librería de acceso a datos. Tal y como se explica en la web del Guille me he descargado el componente y lo he instalado. He abierto el ensamblado y lo he compilado. Luego he copiado y añadido una referencia de la dll generada a mi proyecto y este es el código final:

modGeneral.vb
Código:
Imports System.Data
Imports System.Data.SqlClient
Imports Microsoft.ApplicationBlocks.Data

Module modGeneral

#Region "Mensajes por SMTP"
    Public Class Mensaje

        Protected Friend Desde As String = ConfigurationSettings.AppSettings("mailAdmin")
        Protected Friend Hacia As String = ""
        Protected Friend Titulo As String = ""
        Protected Friend Cuerpo As String = ""

        Public Sub enviar()
            Dim mensaje As New System.Web.Mail.MailMessage
            mensaje.From = Desde
            mensaje.To = Hacia
            mensaje.Subject = Titulo
            mensaje.Body = Cuerpo
            mensaje.BodyFormat = Mail.MailFormat.Html
            Dim mailSMTP As System.Web.Mail.SmtpMail
            mailSMTP.SmtpServer = ConfigurationSettings.AppSettings("SMTPServer")
            mailSMTP.Send(mensaje)
        End Sub

    End Class
#End Region

#Region "Conexión a la base de datos"

    Public Class OrigenDatos
        Friend Shared con As SqlConnection
        Private Shared strCon As String

        Shared Sub New()
            con = New SqlConnection(ConfigurationSettings.AppSettings("strcon"))
        End Sub 'New

        Public Shared Function Verificar() As Boolean
            Try
                con.Open()
            Catch
            Finally
                con.Close()
            End Try
            Return True
        End Function 'Verificar 

        Public Shared Function DevuelveDS(ByVal strQuery As String) As DataSet
            Return SqlHelper.ExecuteDataset(con, strQuery, Nothing)
        End Function

    End Class 'OrigenDatos

#End Region
Luego, en una página cualquiera:

Código:
Response.Write(OrigenDatos.DevuelveDS("SP_RolDeUsuario").Tables(0).Rows(0).ItemArray.GetValue(0))
Y marchando perfectamente.

Un saludo de nuevo.
__________________
¡¡NO A LA GUERRA!!
Si ponemos a nuestros mensajes títulos adecuados, la gente se animará más a abrirlos y resultarán más útiles en las busquedas. ¡No a los ayuuudaaa, urgenteee y similares!
  #14 (permalink)  
Antiguo 26/12/2005, 11:19
Avatar de RootK
Moderador
 
Fecha de Ingreso: febrero-2002
Ubicación: México D.F
Mensajes: 8.004
Antigüedad: 22 años, 2 meses
Puntos: 50
El ejemplo está bien, la cuestion es que le voy más al Enterprise Library (EL), porque ese application block está enfocado para SQL Server que tambien es válido pero si de una vez quiere implementar un design pattern baja el EL y agrega las referencia, no tienes que preocuparte por modificar el code.. ahora que si quieres aprenderlos a usar te puedes bajar tambien los Hands On Lab.

Pero bueno.. checalos y ocupa el que para tí sea más conveniente.

Saludos
  #15 (permalink)  
Antiguo 27/12/2005, 08:31
Avatar de rodri  
Fecha de Ingreso: febrero-2005
Mensajes: 406
Antigüedad: 19 años, 2 meses
Puntos: 2
Hola otra vez, tal vez viste la misma libreria fuente, la verdad es super larga y si, si tiene muuuchas lineas de codigo, pero eso es transparente para vos, tu solo tienes que usar unas mm 3 o cuatro lineas para una consulta o ejecución básica con una base de Datos. Ahora ya que enterprise library no ha salido todavia en su versión definitiva para el .net 2.0, no tiene su configuration Console que es una app windows que ayuda muchisimo a configurar correctamente el archivo .config, pero tranquilo, aca esta un ejemplo de web.config que tienes que pegar para que funcione, ojo, tienes que poner dentro de la etiqueta <configuration>.
Código:
<configSections>
    <section name="dataConfiguration" type="Microsoft.Practices.EnterpriseLibrary.Data.Configuration.DatabaseSettings, Microsoft.Practices.EnterpriseLibrary.Data" />
  </configSections>
	<connectionStrings>
<add name="MiConnectionString" connectionString="Data Source=MiServidor;Initial Catalog=MiBaseDatos;Persist Security Info=True;User ID=UserId;Password=UserPassword"
   providerName="System.Data.SqlClient" />
 </connectionStrings>
  <dataConfiguration defaultDatabase="MiConnectionString"/>
bueno, espero que te sirva, y no te desanimes, es una herramienta que vale la pena.
__________________
0.o Rodri
  #16 (permalink)  
Antiguo 29/09/2006, 07:26
 
Fecha de Ingreso: febrero-2003
Ubicación: Bilbao
Mensajes: 38
Antigüedad: 21 años, 2 meses
Puntos: 0
Una duda sobre esto, para .NET 2.0 que uso? Enterprise Library?
Es decir el que estabais hablando el application Blocks es el Enterprise Library? Alguna guia para un uso sencillo de este?

Y una duda mas generica sobre la aplicación que estoy diseñando, tenía pensado el uso de objetos para realizar mi aplicación web (sobre un equipo de futbol aficionado), las conexiones las meto en el constructor para los objetos individuales, por ejemplo pasandoles el id, que lo busque en la base de datos y cree el objeto, pero para obtener el array de objetos, desde que clase creariasi el metodo. Por ser mas especifico, tengo una clase Jugador, pero cuando quiero sacar un array de todos los jugadores que hay en la base de datos desde donde crearias el metodo para que pueda ser reutilizado a lo largo de toda la aplicacion? Una clase generica para este y un monton de metodos más? Estas clases para metodos son abstractas no?
Como veis tengo bastante oxidada la programacion de objetos. :$

Un saludo y muchas gracias.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 22:37.