Clase de conexión VB.Net a SQL

Siempre es bueno tener a la mano una clase que encapsule todos los métodos de conexión con la BD, aqui les dejo una alternativa que yo siempre uso.

Obviamente tendrán que exportar los parámetros de conexion a un archivo .ini o xml si es que les parece más sencillo.

Imports System.Data
Imports System.Data.SqlClient
Imports System.Text

Module modConeccion
   Private cn As SqlConnection
   Private da As SqlDataAdapter
   Private dt As DataTable
   Private cm As SqlCommand
   Private dr As SqlDataReader

   Public Enum TipoProcesamiento
       NonQuery = 1
       Scalar = 2
       DataTable = 3
   End Enum


   Public Sub GeneraCadena(ByVal cServidor As String, ByVal cBase As String, ByVal cUsuario As String, ByVal cPassword As String)
       cn = New SqlConnection("Server=" & cServidor & ";Database=" & cBase & ";Uid=" & cUsuario & ";Pwd=" & cPassword & ";")
   End Sub

   Public Sub Conectar()
       GeneraCadena({SERVIDOR}, {BD}, {USUARIO}, {PASSWORD})
       cn.Open()
   End Sub

   Public Sub Desconectar()
       cn.Close()
       'cn.Dispose()
   End Sub

   Public Function EjecutarConsulta(ByVal cConsulta As String, ByVal cTipoProceso As TipoProcesamiento, Optional ByVal bAlerta As Boolean = True) As Object
       Try
           Conectar()
           If cTipoProceso = TipoProcesamiento.NonQuery Then
               cm = New SqlCommand(cConsulta, cn)
               cm.ExecuteNonQuery()
               Return True
           ElseIf cTipoProceso = TipoProcesamiento.Scalar Then
               cm = New SqlCommand(cConsulta, cn)
               Return cm.ExecuteScalar()
           ElseIf cTipoProceso = TipoProcesamiento.DataTable Then
               da = New SqlDataAdapter(cConsulta, cn)
               dt = New DataTable()
               da.Fill(dt)
               Return dt
           Else
               Throw New Exception("Tipo de procesamiento no válido")
           End If
       Catch ex As Exception
           If bAlerta = True Then
               MsgBox("Error: " & ex.Message, MsgBoxStyle.Critical, "Error")
           End If
           Return Nothing
       Finally
           Desconectar()
       End Try
   End Function

   Public Function EjecutarProcedure(ByVal cNombreProcedure As String, ByVal pParametros() As SqlParameter, ByVal cTipoProceso As TipoProcesamiento, Optional ByVal bAlerta As Boolean = True) As Object
       Try
           Conectar()
           Dim cm As New SqlCommand
           cm = New SqlCommand(cNombreProcedure, cn)
           cm.CommandType = CommandType.StoredProcedure
           cm.Parameters.AddRange(pParametros)

           If cTipoProceso = TipoProcesamiento.NonQuery Then
               cm.ExecuteNonQuery()
               Return True
           ElseIf cTipoProceso = TipoProcesamiento.Scalar Then
               Return cm.ExecuteScalar
           ElseIf cTipoProceso = TipoProcesamiento.DataTable Then
               da = New SqlDataAdapter(cm)
               dt = New DataTable()
               da.Fill(dt)
               Return dt
           Else
               Throw New Exception("Tipo de procesamiento no válido")
           End If
       Catch ex As Exception
           If bAlerta = True Then
               MsgBox("Error: " & ex.Message, MsgBoxStyle.Critical, "Error")
           End If
           Return Nothing
       Finally
           Desconectar()
       End Try
   End Function
End Module


Reemplazar los datos de conexion (encerrados por {}) de acuerdo a tus necesidades

6 comentarios:

Unknown dijo...

Buenísimo, Muchas gracias...

Solo te falto unos ejemplos de las llamadas a las funciones... EjecutarConsulta("select a from b",..)

Ximena Williams dijo...

me gusta como resumen los datatable, sqlconnection, dataset....
Para uso en toda la aplicacion.

Unknown dijo...

Excelente forma de hacer las cosas.. felicidades y exitos a todos

Unknown dijo...

Genial

Unknown dijo...

Hola a Todos: He empleado este ejemplo para desarrollar una aplicación web en vb.net el único problemas que se me ha presentado es que cuando llamo a la función Ejecutar Consulta en mas de una ocación para un formularios, el código como que se marea y me retorna el ultimo datatable. Les agradeceré me puedan ayudar con este problema.

MIALTU dijo...

Probablemente te falta limpiar el dataset antes de llamar nuevamente al metodo.

Publicar un comentario