Primero vamos a ver como ejecutar consultas para inserciones, modificaciones o eliminaciones:
Public Function EjecutarConsulta(ByVal CadenaSql As String) As Boolean Try Me.CrearComando(CadenaSql, "S") Me.EjecutarComando() EjecutarConsulta = True Catch ex As Exception EjecutarConsulta = False Throw New BaseDatosException("ERROR :" & ex.Message & " BASEDATOS.EjecutarConsulta ", ex) End Try End Function
Esta funcion crea un comando que ejecutara la consulta en la Base de Datos.
Para utilizar esta funcion necesitamos dos funciones mas :
Private Sub CrearComando(ByVal CadenaSql As String, _ ByVal TipoConsulta As String) Try Select Case tipoBBDD Case BBDD.SQL : Me.Commando = New SqlCommand Case BBDD.ODBC : Me.Commando = New OdbcCommand Case BBDD.OLEDB : Me.Commando = New OleDbCommand End Select Me.Commando = _Factory.CreateCommand() Me.Commando.Connection = Me.Conexion Me.Commando.CommandTimeout = 99999999 Select Case TipoConsulta Case "P" 'Procedimiento almacenado Me.Commando.CommandType = CommandType.StoredProcedure Case "T" Me.Commando.CommandType = CommandType.TableDirect Case Else 'Sentencia SQL Me.Commando.CommandType = CommandType.Text End Select Me.Commando.CommandText = CadenaSql If Not Me.Transaccion Is Nothing Then Me.Commando.Transaction = Me.Transaccion End If Catch ex As Exception Throw New BaseDatosException("ERROR :" & ex.Message & " BASEDATOS.CrearComando ", ex) End Try End Sub
Private Sub EjecutarComando() Try Me.Commando.ExecuteNonQuery() Catch ex As Exception Throw New BaseDatosException("ERROR :" & ex.Message & " BASEDATOS.EjecutarComando ", ex) End Try End Sub
Si lo que queremos es hacer consultas para recuperar datos de la base de datos y tratarlos luego en nuestro programa tenemos varias opciones, podemos traernos en un DATAREADER, DATATABLE o en un DATASET. A mi me gusta mas recuperarlo en un DATATABLE pues a mi parecer es mas fácil tratar despues los datos.
Para poder utilizar las siguientes funciones debemos primero crear esta funcion, que dependiendo del tipo de Base de Datos que tengamos ejecutara la consulta de una manera o de otra.
Private Function EjecutarConsultaDataAdapter() As IDataAdapter Try Select Case tipoBBDD Case BBDD.SQL : EjecutarConsultaDataAdapter = New SqlDataAdapter(Me.Commando) Case BBDD.ODBC : EjecutarConsultaDataAdapter = New OdbcDataAdapter(Me.Commando) Case BBDD.OLEDB : EjecutarConsultaDataAdapter = New OleDbDataAdapter(Me.Commando) Case Else : Return Nothing End Select Catch ex As Exception Return Nothing Throw New BaseDatosException("ERROR :" & ex.Message & " BASEDATOS.EjecutarConsultaDataAdapter ", ex) End Try End Function
La siguiente funcion ejecuta una consulta (CadenaSQL) y devuelve el resultado en un DATATABLE (Tabla) que luego podemos tratar en la capa de NEGOCIO. TipoConsulta nos dice si se trata de una consulta o de un procedimiento Almacenado y con "HayParametros" le decimos si le pasamos parametros (solo en el caso de que estemos tratando con un procedimiento almacenado.
Public Function Dame_Datos_DT(ByVal CadenaSQL As String, _ ByVal HayParametros As Boolean, _ ByRef Tabla As DataTable, _ ByVal TipoConsulta As String) As Boolean Dim arsDatos As IDataAdapter Dim datos As New DataSet Dim i As Integer = 0 Try Select Case tipoBBDD Case BBDD.SQL : arsDatos = New SqlDataAdapter Case BBDD.ODBC : arsDatos = New OdbcDataAdapter Case BBDD.OLEDB : arsDatos = New OleDbDataAdapter End Select CrearComando(CadenaSQL, TipoConsulta) If HayParametros Then While i <= UBound(pParametros) Me.Commando.Parameters.Add(pParametros(i)) i = i + 1 End While End If arsDatos = Me.EjecutarConsultaDataAdapter() arsDatos.Fill(datos) Tabla = datos.Tables(0) If Tabla.Rows.Count > 0 Then Dame_Datos_DT = True Else Dame_Datos_DT = False End If Catch ex As Exception Dame_Datos_DT = False Throw New BaseDatosException("ERROR :" & ex.Message & " BASEDATOS.DameDatosDT ", ex) End Try End Function
La siguiente funcion Ejecuta una consulta (CadenaSQL) y devuelve los datos en un DATAADAPTER que luego podremos utilizar en la capa NEGOCIO.
Public Function Dame_Datos_DA(ByVal CadenaSQL As String, _ ByVal HayParametros As Boolean, _ ByVal TipoConsulta As String) As IDataAdapter Try Dim i As Integer = 0 CrearComando(CadenaSQL, TipoConsulta) If HayParametros Then While i <= UBound(pParametros) Me.Commando.Parameters.Add(pParametros(i)) i = i + 1 End While End If Return Me.EjecutarConsultaDataAdapter() Catch ex As Exception Dame_Datos_DA = Nothing Throw New BaseDatosException("ERROR :" & ex.Message & " BASEDATOS.DameDatos_DA ", ex) End Try End FunctionLa siguiente funcion ejecuta una consulta (CadenaSQL) y devuelve los datos en un DATAREADER que luego podremos utilizar en la capa de NEGOCIO.
Public Function Dame_Datos_DR(ByVal CadenaSQL As String, _ ByVal HayParametros As Boolean, _ ByVal TipoConsulta As String) As IDataReader Try Dim i As Integer = 0 CrearComando(CadenaSQL, TipoConsulta) If HayParametros Then While i <= UBound(pParametros) Me.Commando.Parameters.Add(pParametros(i)) i = i + 1 End While End If Return Me.Commando.ExecuteReader() Catch ex As Exception Return Nothing Throw New BaseDatosException("ERROR :" & ex.Message & " BASEDATOS.DameDatosDR ", ex) End Try End Function
Nota: "HayParametros" le dice a la base de datos que el procedimiento almacenado lleva parametros.
Para poder pasar parametros debemos de utilizar la siguiente funcion:
Public Function Añadir_Parametro(ByVal Indice As Integer, _ ByVal Nombre As String, _ ByVal Tipo As String, _ ByVal Valor As String) As Boolean Try ReDim Preserve pParametros(Indice) Select Case tipoBBDD Case BBDD.SQL pParametros(Indice) = New SqlParameter Case BBDD.ODBC pParametros(Indice) = New OdbcParameter Case BBDD.OLEDB pParametros(Indice) = New OleDbParameter End Select pParametros(Indice).ParameterName = Nombre Select Case Tipo Case "L" 'Long pParametros(Indice).DbType = DbType.Int64 Case "D" 'Double pParametros(Indice).DbType = DbType.Double Case "B" 'Bit- Booleano pParametros(Indice).DbType = DbType.Boolean Case "DC" 'Decimal pParametros(Indice).DbType = DbType.Decimal Case "DT" 'Datetime pParametros(Indice).DbType = DbType.DateTime Case "S" 'String pParametros(Indice).DbType = DbType.String Case "I" 'Integer pParametros(Indice).DbType = DbType.Int32 Case "SM" 'Smallint pParametros(Indice).DbType = DbType.Int16 End Select pParametros(Indice).Value = Valor Añadir_Parametro = True Catch ex As Exception Añadir_Parametro = False Throw New BaseDatosException("ERROR :" & ex.Message & " BASEDATOS.Añadir_Parametro ", ex) End Try End Function
Esta funcion debemos de llamarla antes que la funcion para devolver los datos de Base de Datos.
Ejemplo:
Datos.CGPO.Añadir_Parametro(0, "CodigoCliente", "I", 125)
Datos.CGPO.Dame_Datos_DT("pa_DameDatosCliente", True, TCliente, "P")
Aqui le estamos diciendo que le pasamos un parametro a la base de datos llamado "CodigoCliente" de tipo Entero "I" con valor 125 en el indice 0. Luego llamamos al procedimiento Almacenado "pa_DameDatosCliente", le decimos que tiene parametros y devolvemos los datos en un DATATABLE llamado TCliente. La "P" indica Procedimiento almacenado, para ver todos los tipos de consulta podeis ver la funcion CrearComando.


0 comentarios:
Publicar un comentario