Automatización de Conexión en N-Capas

29/07/2003 - 22:13 por Juan Carlos Zúñiga Coto | Informe spam
Hola,

Estoy tratando de diseñar e implementar una aplicación en
N-Capas. Surgio el problema de abrir solo una vez la
conexión a base de datos con ADO, ya que el componente
siempre tiene que abrir una nueva conexión y después
cerrar cuando hago el llamado del método que ejecuta la
consultas a nivel de base de datos, y además la cadena de
conexión, "ConnectionString", esta a nivel de código
dentro del componente.

Que soluciones existen para tener un conexión siempre
abierta y configurable ("ConnectionString", TimeOut, etc)
para queel componente la solicite tantas veces la necesite
de ella sin tener que cerrearla y volver abrir de nuevo la
conexión.

De antemano, agradezco cualquier ayuda que me puedan
brindar.

Preguntas similare

Leer las respuestas

#1 Marcel
30/07/2003 - 00:28 | Informe spam
Hola Juan :

<Que soluciones existen para tener un conexión siempre
<abierta y configurable ("ConnectionString", TimeOut, etc)
<para queel componente la solicite tantas veces la necesite
<de ella sin tener que cerrearla y volver abrir de nuevo la
<conexión.

La manera primordial de hacer que una única conexión --ya establecida
correctamente--sea la que acceda a la base de datos en todo el programa, es
que se asigne a cada módulo de clase que se vaya activando; es práctica
habitual tener una DLL para acceder a la base de datos, la cual tiene una
variable pública de tipo conexión ADO. En esta clase programamos los
procesos que manipularan la base de datos segun la necesidad a cubrir; Hemos
creado, pues, una programacion modular independiente del cuerpo del
programa. La conexión se asigna antes de invocar la dll, como es lógico.

<consultas a nivel de base de datos, y además la cadena de
<conexión, "ConnectionString", esta a nivel de código
<dentro del componente.

Podemos hacer varias "selects" -por ejemplo- sobre diferentes recordsets ADO
pasando como parámetro la conexión actualmente establecida. La función o
proceso de la DLL que invocaremos desde el programa llamador para iniciar la
lectura, será también público (public). Los demás procesos de la Dll no
tienen por qué serlo. Son de orden interno (private) y obedecen a una buena
organizacion del código.

Análogamente, podemos pasar las instrucciones SQL a través de variables
string publicas en la dll, que nos retornen valores mediante un raiseevent
en las lecturas de cada registro.

De forma semejante, podriamos programar OCX, los controles de usuario
ActiveX en lugar de las DLL Siendo esencialmente lo mismo : objetos
variables y procesos públicos para controlar el funcionamiento del
usercontrol ocx.


Saludos desde la deportiva Barcelona
Marcel


"Juan Carlos Zúñiga Coto" escribió en el
mensaje news:01ea01c3560d$d2834e10$

Hola,

Estoy tratando de diseñar e implementar una aplicación en
N-Capas. Surgio el problema de abrir solo una vez la
conexión a base de datos con ADO, ya que el componente
siempre tiene que abrir una nueva conexión y después
cerrar cuando hago el llamado del método que ejecuta la
consultas a nivel de base de datos, y además la cadena de
conexión, "ConnectionString", esta a nivel de código
dentro del componente.

Que soluciones existen para tener un conexión siempre
abierta y configurable ("ConnectionString", TimeOut, etc)
para queel componente la solicite tantas veces la necesite
de ella sin tener que cerrearla y volver abrir de nuevo la
conexión.

De antemano, agradezco cualquier ayuda que me puedan
brindar.
Respuesta Responder a este mensaje
#2 José Trinidad [El Tiko]
30/07/2003 - 01:13 | Informe spam
Salu2!

La mejor manera que conozco para manejar Conexiones a BD en un esquema
N-Tiers es usar una propiedad ConnectionString en tu DLL a Nivel de Capa de
Negocios y desde tu Capa de Presentación realizar la Conexión inicial a la
BD, cuando esta conexión este establecida -despúes del proceso de Login Por
ejemplo- Cierras la Conexión en la Capa de Presentación pero Guardas la
Cadena de Conexión Resultante en alguna Variable o Propiedad Publica en tu
capa de Presentación, luego en la capa de Negocios debes de implementar una
propiedad -ConnectionString- que recibirá como parametro desde tu Capa de
Presentación para poder ejecutar los SP. Ejemplo! :


Capa de Negocios
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
CArticulos -> Property «ConnectionString» -Recibe la Cadena de Conexión

Private prvConnectionString As String -Local Copy -Property:
ConnectionString-

Public Property Let ConnectionString(ByVal strConnectionString As String)
prvConnectionString = strConnectionString
End Property

Public Function RecuperarDatosArticulo(lngIdArticulo as Long) as Boolean
Dim Cn As ADODB.Connection, Cm As ADODB.Command
Set Cn = New ADODB.Connection
Set Cm = New ADODB.Command
Cn.Open prvConnectionString
On Local Error GoTo Err_Recuperar
With Cm
...
...
.Execute , , adExecuteNoRecords
End With
RecuperarDatosArticulo = True
Salir:
Exit Function
Err_Nuevo:
MsgBox "Ocurrio un problema al Recuperar los Datos del Artículo" &
vbCrLf & _
"Detalles:" & Err.Description, vbExclamation, "Capa Negocios /
RecuperarDatosArticulo"
'// También puedes recorrer la colleción Erros del Objeto Connection
para determinar otros errores.
Err.Clear
RecuperarDatosArticulo = False
Resume Salir
End Function

Capa de Presentación
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
FrmLogin -> Login/Usuario -Un Form, donde
pides el UserName y tu Pasword-, creas la Cadena de Conexión y tratas de
Conectar...
ModGeneral -> Property «ConnectionString» -Propiedad Global para tu
Proyecto-


FrmArticulos ->Aquí se va a hacer uso de la Capa de Negocios
Dim cArticulo as CapaNegocios.cArticulos

Evento: Load
Set cArticulo = New CapaNegocios.cArticulo
cArticulo.ConnectionString = ModGeneral.ConnectionString -> Le
Pasamos la Cadena de Conexión
If CArticulos.RecuperarDatosArticulo(1) then
Msgbox "Prueba de la Capa de Negocios
Satisfactoria",vbinformation
else
Msgbox "Error en la Prueba",vbcritical
End If
End Sub



Mucha Suerte!!! :-)

Att.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
José Trinidad García M. <El Tiko>
(Guía de buen uso del foro)
http://perso.wanadoo.es/rubenvigon/foro
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Respuesta Responder a este mensaje
#3 Julio C. Briceño R.
30/07/2003 - 03:10 | Informe spam
Saludos,

Si tus clases están dentro de una clase madre puedes tener
tu objeto connection declarado como público y acceder a él
desde tus otras clases. Ahora, también existe la opción de
que pases tu conexión (la que abres por primera vez) a las
otras capas como parámetro. El mismo ADO te da la
solución, qué te pide un objeto recordset para poder
actuar sobre una base de datos, una conexión, y el ¿vuelve
a conectarse? La respuesta más obvia es no, el objeto
conexión viaja y el lo utiliza con otro alcance. Por eso
sucede a veces que hay que cerrar recodsets por que si no
queda abierta la conexión a pesar de cerrarla
explicitamente.

Hasta luego,

Julio C. Briceño R.
Caracas, Venezuela
Analista de Sistema
C.I. V 13.952.301



Hola,

Estoy tratando de diseñar e implementar una aplicación en
N-Capas. Surgio el problema de abrir solo una vez la
conexión a base de datos con ADO, ya que el componente
siempre tiene que abrir una nueva conexión y después
cerrar cuando hago el llamado del método que ejecuta la
consultas a nivel de base de datos, y además la cadena de
conexión, "ConnectionString", esta a nivel de código
dentro del componente.

Que soluciones existen para tener un conexión siempre
abierta y configurable ("ConnectionString", TimeOut, etc)
para queel componente la solicite tantas veces la


necesite
de ella sin tener que cerrearla y volver abrir de nuevo


la
conexión.

De antemano, agradezco cualquier ayuda que me puedan
brindar.

.

Respuesta Responder a este mensaje
#4 José Trinidad [El Tiko]
01/08/2003 - 22:09 | Informe spam
Salu2!

Buena observación... realmente la capa de negocios debería de
implementar algun tipo de Coleción como «ERRORS» del ADO, para que la capa
de presentación despliegue los mensajes de la capa de Negocios Tu sabes
cuando uno anda con pereza le da por hacer chapuzas! ;-)

Un Saludo!!!

Att.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
José Trinidad García M. <El Tiko>
(Guía de buen uso del foro)
http://perso.wanadoo.es/rubenvigon/foro
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida