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:
Buenísimo, Muchas gracias...
Solo te falto unos ejemplos de las llamadas a las funciones... EjecutarConsulta("select a from b",..)
me gusta como resumen los datatable, sqlconnection, dataset....
Para uso en toda la aplicacion.
Excelente forma de hacer las cosas.. felicidades y exitos a todos
Genial
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.
Probablemente te falta limpiar el dataset antes de llamar nuevamente al metodo.
Publicar un comentario