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