Uso de DataManager en procesos de librerías

Creado por David Miralpeix, Modificado el Vie, 16 Feb a 2:05 P. M. por David Miralpeix


Recuerda que dispones de una solución a tu disposición en https://github.com/flexygo/HighCode/



El objeto DataManager se usa principalmente para consultar y ejecutar todo tipo de sentencias SQL a las bases de datos de flexygo. Aquí presentamos breves ejemplos de su uso. 

Es recomendable siempre construir el objeto con el contexto de seguridad de la sesión, pasándole la información del objeto ProcessHelper.


Cómo se instancia:

'Declaración de variables
Dim dmConf As DataManager
Dim dmData As DataManager

'Datamanager contra la base de datos de configuración
dmConf = New DataManager("ConfConnectionString")

'Si disponemos del ProcessHelper (Ret):
dmData = New DataManager(Ret.ConfToken.UserSecurity.ConnectionStrings("DataConnectionString"))


'Datamanager contra la base de datos de datos
dmData = New DataManager("DataConnectionString")

'Si disponemos del ProcessHelper (Ret):
dmData = New DataManager(Ret.ConfToken.UserSecurity.ConnectionStrings("DataConnectionString"))

'Véase que para construir el objeto, es necesario pasarle el identificador de la cadena de conexión.


También el objeto EntityObject tiene un Datamanager, el cual podemos utilizar para realizar consultas


GetValue


Public Shared Function testGetValue(ByVal Entity As EntityObject, Param1 As Boolean, ByRef Ret As ProcessHelper)
        Dim dm As DataManager = Entity.DataManager

        Try
            'Obtenemos un valor con GetValue
            Dim Ne As Integer = dm.GetValue("SELECT Max(IdEjercicio)+1 As NewEjercicio FROM Conta_Ejercicios", "NewEjercicio")

            Return True

        Catch e As Exception
            dm.RollbackTrans()
            Ret.Success = False
            Ret.WarningMessage = e.Message
            Return False
        Finally
        End Try
    End Function



Datatable: Útil para cuando necesitamos consultar/recorrer un conjunto de registros de la base de datos


Public Shared Function ApplyStep(Entity As EntityObject, Ret As ProcessHelper) As Boolean
            Dim dmData As DataManager
            Dim dt As DataTable
            Try

                dmData = New DataManager("DataConnectionString")
                dt = dmData.DataTable(String.Format("Select script as field1, field2 from table")

                'Control transaccional
                dmData.BeginTrans()

                'recorremos las filas de la tabla
                For Each row As DataRow In dt.Rows
                    dmData.ExecuteSQLInstruction(IO.File.ReadAllText(Ret.ConfToken.MapPath(row.Item("field1").ToString)).Replace(vbNewLine & "GO", ";"))
                Next

                dmData.ExecuteSQLInstruction("sp_MSforeachtable 'ALTER TABLE ? CHECK CONSTRAINT all'")
                dmData.ExecuteSQLInstruction("sp_msforeachtable 'ALTER TABLE ? ENABLE TRIGGER all'")
                If dmData.InTrans Then
                    'cierro transacción
                    dmData.CommitTrans()
                End If
                'recargar cache y reiniciar aplicación
                MyCache.Clear()
                MySession.Clear()
                Ret.Success = True
                Ret.JSCode = "location.reload(true)"
                Return False
            Catch ex As Exception

                'control transaccional. Deshacer transacciones
                If dmData IsNot Nothing AndAlso dmData.InTrans Then
                    dmData.RollbackTrans()
                End If

                Ret.Success = False
                Ret.LastException = ex
                Return False
            Finally
                If dt IsNot Nothing Then
                    dt.Clear()
                End If
                If dmData IsNot Nothing Then
                    dmData.Close()
                End If
                If dmConf IsNot Nothing Then
                    dmConf.Close()
                End If
            End Try
        End Function



ExecuteSql


Public Shared Function TestExecuteSql(ByVal Entity As EntityCollection, ByRef Ret As ProcessHelper) As Boolean
        Try

            Dim sql As String = "Insert into table (f1, f2, f3, f4) " &
            "Values ('1','2',3,'4') "

            Entity.DataManager.ExecuteSql(sql)
            If Not Entity.DataManager.LastException Is Nothing Then
                Throw New ArgumentException("process error . " & vbCrLf & Entity.DataManager.LastException.Message)
                Return False
            End If

            Ret.Success = True
            Return True
        Catch e As Exception
            Ret.Success = False
            Ret.WarningMessage = e.Message
            Return False
        Finally
        End Try
    End Function




ExecuteStored

Ejecutar storeds procedures con parámetros


'Ejecutar una stored procedure con parámetros
'Tenga en cuenta que si en la stored existen parámetros output, éstos retornarán a la colección de parámetros con su dato actualizado.
Dim dm As DataManager = Entity.DataManager
Dim params As New BaseCollection 'definimos parámetros

                params.Add("IdEjercicio1", IdEjercicio)
                params.Add("IdEjercicio2", Ne)
                params.Add("PlanContable", PlanContable)
                params.Add("SubCuentas", CopiarSubcuentas)
                params.Add("CopiarAños", Renumerar)

                If dm.ExecuteStored("Ejercicios_Trasvase", params) Then
                    If Defecto Then
                        dm.ExecuteSql(String.Format("Update Empresa set IdEjercicioDefecto={0} where IdEmpresa={1}", Ne, Entity("IdEmpresa")))
                    End If

                Else

                    Throw New InvalidOperationException("Error haciendo el trasvase de ejercicio", dm.LastException)
                End If


ExecuteStoredResult

Ejecutar storeds procedures que retornan conjuntos de resultados en "selects"


Dim dm As New DataManager(Ret.ConfToken.UserSecurity.ConnectionStrings("DataConnectionString"))

Dim params As New BaseCollection
Dim ds As DataSet

If Not dm.ExecuteStoredResult("_testdata", params, ds, "Cli,Emp", True) Then
  Throw New InvalidOperationException("Error .....", dm.LastException)
End If
For Each r As DataRow In ds.Tables("Cli").Rows
  'Do something
  'r.Item("IdClient").ToString
Next

For Each r As DataRow In ds.Tables("Emp").Rows
  'Do something
  'r.Item("IdEmployee").ToString
Next



Ejemplos prácticos:

https://github.com/flexygo/HighCode/blob/master/Sample_Project/Sample_Project_Processes/CoursesProcesses.vb






¿Le ha sido útil este artículo?

¡Qué bien!

Gracias por sus comentarios

¡Sentimos mucho no haber sido de ayuda!

Gracias por sus comentarios

¡Háganos saber cómo podemos mejorar este artículo!

Seleccione al menos una de las razones
Se requiere la verificación del CAPTCHA.

Sus comentarios se han enviado

Agradecemos su esfuerzo e intentaremos corregir el artículo