Jump to content
Maradona101

Classe MySQL

Recommended Posts

Maradona101

Boas. Tenho a seguinte classe em Visual Basic:

Imports MySql.Data.MySqlClient
Imports MySql.Data.Types

Public Class _MySql_VB

    Public Enum TiposDadosCampo
        DB_String = 1
        DB_Numero
        DB_Booleano
        DB_DateTime
    End Enum

    'Variáveis de instância
    Private _server As String
    Private _username As String
    Private _userPassword As String
    Private _schema As String
    Private _ConexaoOk As Boolean
    Private _ConexaoObj As MySqlConnection
    Private _StringConexao As String

    'Construtores
    Public Sub New(ByVal schema As String)
        Me.New("localhost", "root", "", schema)
    End Sub
    Public Sub New(ByVal username As String, ByVal userPassword As String, ByVal schema As String)
        Me.New("localhost", username, userPassword, schema)
    End Sub
    Public Sub New(ByVal server As String, ByVal username As String, ByVal userPassword As String, ByVal schema As String)
        setStringConexao(server, username, userPassword, schema)
        testaConexao(True)
    End Sub

    'Propriedades
    Public ReadOnly Property EstadoConexao() As ConnectionState
        Get
            Return Me._ConexaoObj.State
        End Get
    End Property
    Public Property ConexaoOk() As Boolean
        Get
            Return Me._ConexaoOk
        End Get
        Private Set(ByVal value As Boolean)
            Me._ConexaoOk = value
        End Set
    End Property
    Public Property Server() As String
        Get
            Return Me._server
        End Get
        Private Set(ByVal value As String)
            Me._server = value
        End Set
    End Property
    Public Property UserName() As String
        Get
            Return Me._username
        End Get
        Private Set(ByVal value As String)
            Me._username = value
        End Set
    End Property
    Public Property UserPassword() As String
        Get
            Return Me._userPassword
        End Get
        Private Set(ByVal value As String)
            Me._userPassword = value
        End Set
    End Property
    Public Property Schema() As String
        Get
            Return Me._schema
        End Get
        Private Set(ByVal value As String)
            Me._schema = value
        End Set
    End Property

    Public Property StringConexao() As String
        Get
            Return Me._StringConexao
        End Get
        Private Set(ByVal value As String)
            Me._StringConexao = value
        End Set
    End Property

    'Métodos
    ''' <summary>
    ''' Definição da String de conexão estática à BD.
    ''' </summary>
    ''' <param name="server"></param>
    ''' <param name="username"></param>
    ''' <param name="userPassword"></param>
    ''' <param name="schema">nome da BD</param>
    ''' <remarks></remarks>
    Protected Sub setStringConexao(ByVal server As String, ByVal username As String, ByVal userPassword As String, ByVal schema As String)
        Me.StringConexao = String.Format("server={0};user id={1}; password={2}; database={3}; pooling=false", _
                                         server, username, userPassword, schema)
    End Sub

    Protected Function AbreConexao() As Boolean
        testaConexao(False)
        Return Me.ConexaoOk()
    End Function
    Protected Sub FechaConexao()
        Me._ConexaoObj.Close()
    End Sub

    Public Sub testaConexao(ByVal fechaAposOTeste As Boolean)
        'marcar conexão indisponível
        Me.ConexaoOk = False
        If Me._ConexaoObj IsNot Nothing Then Me._ConexaoObj.Close()
        Me._ConexaoObj = New MySqlConnection(Me.StringConexao)
        Me._ConexaoObj.Open()
        ' se conseguiu abrir a conexão então está tudo ok!
        Me.ConexaoOk = True
        If fechaAposOTeste Then Me._ConexaoObj.Close()
    End Sub

    ''' <summary>
    ''' Método de injecção de SQL de consulta à BD.
    ''' </summary>
    ''' <param name="comandoSQL">Comando SQL do tipo SELECT a executar.</param>
    ''' <returns>Devolve uma DataTable que poderá por ex. ser usada para povoar uma DataGridView</returns>
    ''' <remarks> Ver: System.Data.DataTable</remarks>

    Public Function ExecSQLselect(ByVal comandoSQL As String) As DataTable
        Dim dt As DataTable = New DataTable()
        If Not AbreConexao() Then Return dt
        Dim da As MySqlDataAdapter = New MySqlDataAdapter(comandoSQL, Me._ConexaoObj)
        da.Fill(dt)
        FechaConexao()
        Return dt
    End Function

    ''' <summary>
    ''' Executa um comando SQL sem retorno de dados. (Ex: INSERT, UPDATE, ...)
    ''' </summary>
    ''' <param name="comandoSQL">SQL a executar.</param>
    ''' <returns>Devolve o número de registos afectados.</returns>
    Public Function ExecSQLcommand(ByVal comandoSQL As String) As Integer
        Dim rowsAffected As Integer = 0
        If Not AbreConexao() Then Return rowsAffected
        Dim cmd As MySqlCommand = New MySqlCommand(comandoSQL)
        cmd.Connection = Me._ConexaoObj
        rowsAffected = cmd.ExecuteNonQuery()
        FechaConexao()
        Return rowsAffected
    End Function

    ''' <summary>
    ''' Executa um comando SQL com retorno de um objecto genérico.
    ''' Método tipicamente usado para execução de consultas de agregação.
    ''' </summary>
    ''' <param name="comandoSQL">SQL a executar.</param>
    ''' <returns>Devolve um objecto que variará com o comando fornecido como parâmetro.</returns>
    Public Function execSQLscalar(ByVal comandoSQL As String) As Object
        Dim ret As Object = Nothing
        If Not AbreConexao() Then Return ret
        Dim cmd As MySqlCommand = New MySqlCommand(comandoSQL)
        cmd.Connection = Me._ConexaoObj
        ret = cmd.ExecuteScalar()
        FechaConexao()
        Return ret
    End Function
    
    ''' <summary>
    ''' Executa uma lista de comandos em bloco no contexto de uma transacção.</summary>
    ''' <param name="sqlCommandList">Lista de comandos a executar. ( System.Collections.Generic.List de strings)</param>
    ''' <param name="valorIN_OUT">Devolve o número de registos afectados se correu tudo bem (ret >= 0).
    ''' Se algo correu mal o valor de valorIN_OUT será:
    ''' -1 - Conexão inexistente (ret = -1)
    ''' -2 - se o estado anterior da BD foi recuperado com Rollback (ret = -2)
    ''' -3 - se o estado anterior da BD NÃO foi recuperado com Rollback (ret = -3). 
    ''' A BD estará num estado incoerente.</param>
    ''' <remarks></remarks>
    Public Sub execTransactionBlock(ByVal sqlCommandList As List(Of String), ByRef valorIN_OUT As Integer)
        Dim ret As Integer = 0
        If Not AbreConexao() Then
            'OOps não faz connect !! (valorIN_OUT = -1)
            valorIN_OUT = -1
            Return
        End If

        Dim cmd As MySqlCommand = Me._ConexaoObj.CreateCommand()
        cmd.Connection = Me._ConexaoObj
        'iniciar a transaction
        Dim myTrans As MySqlTransaction = Me._ConexaoObj.BeginTransaction()
        cmd.Transaction = myTrans
        Try
            For Each strSql As String In sqlCommandList
                cmd.CommandText = strSql
                ret += cmd.ExecuteNonQuery()
            Next
            'se chegou aqui então correu ok
            myTrans.Commit()
            FechaConexao()

        Catch ex As Exception

            'Correu mal. Tentemos o Rollback
            Try
                myTrans.Rollback()
                'Correu mal mas o estado anterior foi recuperado com Rollback (valorIN_OUT = -2)
                'A BD está coerente.
                valorIN_OUT = -2
            Catch exin As Exception
                'Correu MESMO mal.
                'O estado anterior NÃO FOI RECUPERADO com Rollback (valorIN_OUT = -3)
                'A BD Não está coerente.
                valorIN_OUT = -3

                'propagação ascendente da excepção 
                Throw exin

            End Try

            'propagação ascendente da excepção 
            Throw ex

        End Try

    End Sub

    ''' <summary>
    ''' Tratamento de valores NULOS vindos de BD 
    ''' </summary>
    ''' <param name="tipoDeDados">Tipo de dados genérico do campo</param>
    ''' <param name="valor">valor cujo nulo se quer testar</param>
    ''' <returns>um Object com o valor preparado para o tipo de dados em causa</returns>
    ''' <remarks></remarks>
    Public Shared Function doNULOS(ByVal tipoDeDados As TiposDadosCampo, ByVal valor As Object) As Object
        Dim val As Object = valor
        If DBNull.Value.Equals(val) Then

            Select Case tipoDeDados
                Case TiposDadosCampo.DB_String
                    val = ""
                Case TiposDadosCampo.DB_Numero
                    val = 0
                Case TiposDadosCampo.DB_Booleano
                    val = False
                Case TiposDadosCampo.DB_DateTime
                    val = Date.Now
            End Select

        End If
        Return val
    End Function

End Class

Esta classe serve para fazer uma ligação a uma base de dados.

Um amigo arranjou me esta classe e disse me que esta base de dados é bastante usada e conhecida. No entatno neste momento preciso de uma classe equivalente, mas para C Sharp de modo a fazer um trabalho. O problema é que ainda não demos esta matéria e o professor disse que seria uma mais valia o uso de abse de dados.

Daí a minha necessidade de ter a classe referida para C Sharp. Se alguém tiver, agradecia que me arranjasse se possivel, obrigado.

Share this post


Link to post
Share on other sites
herty

Aconselhava-te a usares antes SQLServer, é mais facil de usar com .net pois ja tens mais bibliotecas.

Crias connection string, abres a conneção e ja esta :D

google it :thumbsup:

Share this post


Link to post
Share on other sites
Maradona101

Pois, também já me disseram isso. O problema é o que o tempo escasseia e se tivesse esta classe estaria á vontade para trabalhar com a base de dados durante a construção da aplicação. Se utilizar o SQLServer terei que "googlar" muito e isso exige muito tempo.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.