A Generar Soluciones .net 2008 Asp.net

#21
Bueno, otra vez mucha teoria. va miren pues! yo estoy haciendo aplicaciones, en vb entonces vamos a iniciar, para conectarme a las bases de datos estoy usando n capas. una acceso a datos, otro reglas del negocio y por ultimo la interfase usuario. entonces miren pues, para el acceso a datos estoy usando una "Proyecto" que he llamado Acceso a Datos que basicamente tiene 2 clases: una llamada BaseDatos.vb que tiene:

mports System.Data.Common
Imports System.Data
Imports System.Configuration
Imports System.Data.SqlClient

''' <summary>
''' Representa la base de datos en el sistema.
''' Ofrece los métodos de acceso a misma.
''' </summary>
Public Class BaseDatos


Private _Conexion As DbConnection = Nothing
Private _Comando As DbCommand = Nothing
Private _Transaccion As DbTransaction = Nothing
Private _CadenaConexion As String

Private Shared _Factory As DbProviderFactory = Nothing

''' <summary>
''' Crea una instancia del acceso a la base de datos.
''' </summary>
Public Sub New()
Configurar()
End Sub

''' <summary>
''' Configura el acceso a la base de datos para su utilización.
''' </summary>
''' <exception cref="BaseDatosException">Si existe un error al cargar la configuración.</exception>
Private Sub Configurar()
Try
Dim proveedor As String = ConfigurationManager.AppSettings.Get("providerName")
Me._CadenaConexion = ConfigurationManager.AppSettings.Get("connectionString")
BaseDatos._factory = DbProviderFactories.GetFactory(proveedor)
Catch ex As ConfigurationErrorsException
Throw New BaseDatosException("Error al cargar la configuración del acceso a datos.", ex)
End Try
End Sub
''' <summary>
''' Permite desconectarse de la base de datos.
''' </summary>
Public Sub Desconectar()
If Me._Conexion.State.Equals(ConnectionState.Open) Then
Me._Conexion.Close()
End If
End Sub

''' <summary>
''' Se concecta con la base de datos.
''' </summary>
''' <exception cref="BaseDatosException">Si existe un error al conectarse.</exception>
Public Sub Conectar()
If Not Me._Conexion Is Nothing Then
If Me._Conexion.State.Equals(ConnectionState.Closed) Then
Throw New BaseDatosException("La conexión ya se encuentra abierta.")
End If
End If

Try
If Me._Conexion Is Nothing Then
Me._Conexion = _Factory.CreateConnection()
Me._Conexion.ConnectionString = _CadenaConexion
End If
Me._Conexion.Open()
Catch ex As DataException
Throw New BaseDatosException("Error al conectarse.")
End Try
End Sub

''' <summary>
''' Crea un comando en base a una sentencia SQL.Ejemplo:
''' <code>SELECT * FROM Tabla WHERE campo1=@campo1, campo2=@campo2</code>
''' Guarda el comando para el seteo de parámetros y la posterior ejecución.
''' </summary>
''' <param name="sentenciaSQL">La sentencia SQL con el formato: SENTENCIA [param = @param,]</param>
Public Sub CrearComando(ByVal sentenciaSQL As String)
Me._Comando = _Factory.CreateCommand()
Me._Comando.Connection = Me._Conexion
Me._Comando.CommandType = CommandType.Text
Me._Comando.CommandText = sentenciaSQL
If Not Me._Transaccion Is Nothing Then
Me._Comando.Transaction = Me._Transaccion
End If
End Sub

''' <summary>
''' Setea un parámetro como nulo del comando creado.
''' </summary>
''' <param name="nombre">El nombre del parámetro cuyo valor será nulo.</param>
Public Sub AsignarParametroNulo(ByVal nombre As String)
AsignarParametro(nombre, "", "NULL")
End Sub

''' <summary>
''' Asigna un parámetro de tipo cadena al comando creado.
''' </summary>
''' <param name="nombre">El nombre del parámetro.</param>
''' <param name="valor">El valor del parámetro.</param>
Public Sub AsignarParametroCadena(ByVal nombre As String, ByVal valor As String)
AsignarParametro(nombre, "'", valor)
End Sub

''' <summary>
''' Asigna un parámetro de tipo entero al comando creado.
''' </summary>
''' <param name="nombre">El nombre del parámetro.</param>
''' <param name="valor">El valor del parámetro.</param>
Public Sub AsignarParametroEntero(ByVal nombre As String, ByVal valor As Integer)
AsignarParametro(nombre, "", valor.ToString())
End Sub

''' <summary>
''' Asigna un parámetro de tipo entero al comando creado.
''' </summary>
''' <param name="nombre">El nombre del parámetro.</param>
''' <param name="valor">El valor del parámetro.</param>
Public Sub AsignarParametroDouble(ByVal nombre As String, ByVal valor As Double)
AsignarParametro(nombre, "", valor)
End Sub
''' <summary>
''' Asigna un parámetro al comando creado.
''' </summary>
''' <param name="nombre">El nombre del parámetro.</param>
''' <param name="separador">El separador que será agregado al valor del parámetro.</param>
''' <param name="valor">El valor del parámetro.</param>
Private Sub AsignarParametro(ByVal nombre As String, ByVal separador As String, ByVal valor As String)
Dim indice As Integer = Me._Comando.CommandText.IndexOf(nombre)
Dim prefijo As String = Me._Comando.CommandText.Substring(0, indice)
Dim sufijo As String = Me._Comando.CommandText.Substring(indice + nombre.Length)
Me._Comando.CommandText = prefijo + separador + valor + separador + sufijo
End Sub

''' <summary>
''' Asigna un parámetro de tipo fecha al comando creado.
''' </summary>
''' <param name="nombre">El nombre del parámetro.</param>
''' <param name="valor">El valor del parámetro.</param>
Public Sub AsignarParametroFecha(ByVal nombre As String, ByVal valor As DateTime)
AsignarParametro(nombre, "'", valor.ToString())
End Sub

''' <summary>
''' Ejecuta el comando creado y retorna el resultado de la consulta.
''' </summary>
''' <returns>El resultado de la consulta.</returns>
''' <exception cref="BaseDatosException">Si ocurre un error al ejecutar el comando.</exception>
Public Function EjecutarConsulta() As DbDataReader
Return Me._Comando.ExecuteReader()
End Function

''' <summary>
''' Ejecuta el comando creado y retorna un escalar.
''' </summary>
''' <returns>El escalar que es el resultado del comando.</returns>
''' <exception cref="BaseDatosException">Si ocurre un error al ejecutar el comando.</exception>
Public Function EjecutarEscalar() As Integer
Dim escalar As Integer = 0
'Dim r As Integer
Try
' r = Me._Comando.ExecuteNonQuery()
'If (r <> -1) Then
'escalar = Integer.Parse(Me._Comando.ExecuteScalar().ToString())
escalar = _Comando.ExecuteScalar
'Else
'escalar = 0
'End If
Catch ex As InvalidCastException
escalar = 0
'Throw New BaseDatosException("Error al ejecutar un escalar.", ex)
End Try
Return escalar
End Function
Public Function CadenaConexion() As String
Try
Return Me._CadenaConexion
Catch ex As InvalidCastException
Throw New BaseDatosException("Error al ejecutar la cadena de conexion.", ex)
End Try
End Function

''' <summary>
''' Ejecuta el comando creado.
''' </summary>
Public Sub EjecutarComando()
Me._Comando.ExecuteNonQuery()
End Sub

''' <summary>
''' Comienza una transacción en base a la conexion abierta.
''' Todo lo que se ejecute luego de esta ionvocación estará
''' dentro de una tranasacción.
''' </summary>
Public Sub ComenzarTransaccion()
If Me._Transaccion Is Nothing Then
Me._Transaccion = Me._Conexion.BeginTransaction()
End If
End Sub

''' <summary>
''' Cancela la ejecución de una transacción.
''' Todo lo ejecutado entre ésta invocación y su
''' correspondiente <c>ComenzarTransaccion</c> será perdido.
''' </summary>
''' <remarks></remarks>
Public Sub CancelarTransaccion()
If Not Me._Transaccion Is Nothing Then
Me._Transaccion.Rollback()
End If
End Sub

luego otra clase para las excepciones:
Public Class BaseDatosException
Inherits ApplicationException

''' <summary>
''' Construye una instancia en base a un mensaje de error y la una excepción original.
''' </summary>
''' <param name="mensaje">El mensaje de error.</param>
''' <param name="original">La excepción original.</param>
Public Sub New(ByVal mensaje As String, ByVal original As Exception)
MyBase.New(mensaje, original)
End Sub

''' <summary>
''' Construye una instancia en base a un mensaje de error.
''' </summary>
''' <param name="mensaje">El mensaje de error.</param>
Public Sub New(ByVal mensaje As String)
MyBase.New(mensaje)
End Sub

End Class

''' <summary>
''' Confirma todo los comandos ejecutados entre el <c>ComanzarTransaccion</c>
''' y ésta invocación.
''' </summary>
Public Sub ConfirmarTransaccion()
If Not Me._Transaccion Is Nothing Then
Me._Transaccion.Commit()
End If
End Sub
Public Function consultar(ByVal strSelect As String) As System.Data.DataSet
Dim trnTemp As System.Data.SqlClient.SqlTransaction = Me._Conexion.BeginTransaction
Dim dtsTemp As System.Data.DataSet = Me.consultar(strSelect, trnTemp)
trnTemp.Commit()
Return dtsTemp
End Function

Public Function consultar(ByVal strSelect As String, ByVal trnTemp As System.Data.SqlClient.SqlTransaction) As System.Data.DataSet
Dim adaTemp As System.Data.SqlClient.SqlDataAdapter = New System.Data.SqlClient.SqlDataAdapter(strSelect, trnTemp.Connection)
adaTemp.SelectCommand.Transaction = trnTemp
Dim dtsTemp As System.Data.DataSet = New System.Data.DataSet
adaTemp.Fill(dtsTemp)
Return dtsTemp
End Function
Public Function DataSetReturn(ByVal sSql As String) As DataSet
'-- Devuelve un DataTable --

Try
'-- Variables --
Dim oDataAdapter As New SqlClient.SqlDataAdapter(sSql, ConfigurationManager.AppSettings.Get("connectionString"))
Dim oDataSet As New DataSet

oDataAdapter.Fill(oDataSet, "Temporal")
Return oDataset

Catch ex As Exception
Throw New BaseDatosException("Error al ejecutar la llamada a tabla." & vbCrLf & "Scrip Ejecutado :" & sSql, ex)
End Try
End Function
End Class

entonces ya bien facil, cuando quiero hacer referencia en una RN al acceso de datos hago algo asi:
Public Function AgregaArea(ByVal iEmpresa As Integer, ByVal iArea As Integer, ByVal sNombre As String) As Boolean
Dim Db As BaseDatos = New BaseDatos
Try
Db.Conectar()
Db.ComenzarTransaccion()
Dim Sql As String = "INSERT Area (Empresa, Area, Nombre) VALUES (@Empresa, @Area, @Nombre) SELECT @@IDENTITY"
Db.CrearComando(Sql)
Db.AsignarParametroEntero("@Empresa", iEmpresa)
Db.AsignarParametroEntero("@Area", iArea)
Db.AsignarParametroCadena("@Nombre", sNombre)
Db.EjecutarComando()
Db.ConfirmarTransaccion()
Catch Ex As BaseDatosException
Db.CancelarTransaccion()
Throw New ReglasNegocioException("Error al crear la Area.", Ex)
Finally
Db.Desconectar()
End Try
Return AgregaArea
End Function

y ya!!!!
facil va!! jajajaja
bueno, espero les ayude, cualquier cosa me cuentan!
bendiciones pue!!!!


para el provider y la conexion uso en mi Login una lectura de un XML que tiene los "parametros" de la conexion.
los leo con esto:
Private Sub frmLogin_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
' Navigate Each XML Element of app.Config file
' Debe cargar las empresas de la base de datos
Try
Dim m_xmld As XmlDocument
Dim m_nodelist As XmlNodeList
Dim m_node As XmlNode

'Creamos el "XML Document"
m_xmld = New XmlDocument()

'Cargamos el archivo
m_xmld.Load("CARECartera.xml")

'Obtenemos la lista de los nodos "name"
m_nodelist = m_xmld.SelectNodes("/Configuracion/BaseDatos/Property")

'Iniciamos el ciclo de lectura
For Each m_node In m_nodelist
'Obtenemos el atributo del codigo
'Obtenemos el Elemento nombre
Dim NombreNodo = m_node.ChildNodes.Item(0).InnerText
Dim ValorNodo = m_node.ChildNodes.Item(1).InnerText
ConfigurationManager.AppSettings.Set(NombreNodo, ValorNodo)
Next
CargaEmpresas()

Catch ex As Exception
MessageBox.Show(ex.Message.ToString, "Menu Dinamico", _
MessageBoxButtons.OK, MessageBoxIcon.Error)
End Try
End Sub
 

novasurf

Bovino maduro
#23
yo apenas estoy empezando a programar con vs2008 y tengo q hacer una pagina q se conecte a un servidor ms-sql2000 con asp, la pagina corre localmente, tengo una version de prueba q corre muy bien pero quiero hacerla mas estilizada y con mayor seguridad, así q espero poder obtener su apoyo en este tema.

Saludos desde Oaxaca, México. La capital del mundo
 
#26
OKKK ,, AMIGOS BAKUNOSSS,, COMO DICEN AK EN COLOMBIA PA LAS QUE SEAAAAAA,,,ACTUALMENTE ESTOY PROGRAMANDO UNA APLICACION PARA MANEJAR LA CORRESPONDECIA EN UNA ALACLADIA......MUYY PRONTO LO SUBIRA PARA QUE LO OBSERVEN Y CRITIQUENN

espit20@hotmail.com
escribanme
 
#27
hola,, espero q esten muy bien!!.,, ustedes me podran ayudar??,, necesito solamente una guia o que me den algunas pistas sobre como hacer una pequeña aplicacion que corra algunos scripts de sql.. Estuve investigando y ya lo pude hacer con un bat,, pero mi jefe quiere que se lo haga en .net..

Gracias!!
 
Arriba