2.4. Clase BaseDatos. Consultas.

0 comentarios
Ahora vamos a ver como podemos hacer consultas a la base de datos (inserciones, modificaciones, eliminaciones o consultas para traernos datos).

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 Function
La 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

Related Posts Plugin for WordPress, Blogger...
Copyright 2011 INFORMATICUCHO.
Blogger Template by Noct.