VB.NET 2005 - Criando uma aplicação completa via código II


Neste artigo eu vou mostrar como criar as classes contendo as regras de negócio e a camada de dados da aplicação que foi definida no artigo  VB.NET 2005 - Criando uma aplicação completa via código I Apenas para lembrar, não estou usando os assistentes do VB 2005; estou fazendo tudo via código e usando os controles disponíveis na barra de ferramentas do VB 2005.

Vamos começar criando um novo projeto no VB 2005 Express do tipo Windows Application usando a linguagem VB.NET. Eu chamei o projeto de AdnAcessoDados.

Vamos começar criando a primeira classe , esta classe que vou refere-se a classe que exibe os dados dos alunos.  No menu Project selecione Add Class e informe o nome AlunosDetalhes.vb. A seguir inclua o seguinte código na classe AlunosDetalhes.

Imports System
Public Class AlunosDetalhes
    Private cAlunoID As Integer
    Private cNome As String
    Private cEndereco As String
    Private cEmail As String

    Public Sub New()
    End Sub

    Public Sub New(ByVal AlunoID As Integer, ByVal Nome As String, ByVal Endereco As String, ByVal Email As String)
        Me.cAlunoID = AlunoID
        Me.cNome = Nome
        Me.cEndereco = Endereco
        Me.cEmail = Email
    End Sub

    Public Property AlunoID() As Integer
        Get
            Return cAlunoID
        End Get
        Set(ByVal value As Integer)
            cAlunoID = value
        End Set
    End Property

    Public Property Nome() As String
        Get
            Return cNome
        End Get
        Set(ByVal value As String)
            cNome = value
        End Set
    End Property

    Public Property Endereco() As String
        Get
            Return cEndereco
        End Get
        Set(ByVal value As String)
            cEndereco = value
        End Set
    End Property

    Public Property Email() As String
        Get
            Return cEmail
        End Get
        Set(ByVal value As String)
            cEmail = value
        End Set
    End Property
End Class

Esta classe define as propriedades AlunoID, Nome,Endereco e Email que são as informações dos alunos que eu desejo tratar e que estão armazenadas na tabela Alunos definida no artigo anterior.

Note que eu criei dois construtores (Sub New) para a classe, um vazio e outro onde atribuo os valores aos membros da classe.

A outra classe que vou implementar será responsável pelo acesso aos dados e pelas operações de selecionar, incluir, alterar e excluir dados da tabela Alunos.

No menu Project selecione a opção Add Class e informe o nome AcessoBD.vb. A seguir inclua o seguinte código nesta classe:

Imports System
Imports System.Data
Imports System.Data.SqlClient
Imports System.Collections
Imports System.Configuration

Public Class AcessoBD

    Private conexaoBD As String
    Public Sub New()
        conexaoBD = My.Settings.strConn
    End Sub

    Public Function InsertAluno(ByVal aluno As AlunosDetalhes) As Integer

        Dim conn As SqlConnection = New SqlConnection(conexaoBD)
        Dim cmd As SqlCommand = conn.CreateCommand

        cmd.CommandType = CommandType.StoredProcedure
        cmd.CommandText = "procInsertAluno"

        cmd.Parameters.Add(New SqlParameter("@AlunoID", SqlDbType.Int))
        cmd.Parameters("@AlunoID").Direction = ParameterDirection.Output

        cmd.Parameters.Add(New SqlParameter("@Nome", SqlDbType.NVarChar, 50))
        cmd.Parameters("@Nome").Value = aluno.Nome

        cmd.Parameters.Add(New SqlParameter("@Endereco", SqlDbType.NVarChar, 50))
        cmd.Parameters("@Endereco").Value = aluno.Endereco

        cmd.Parameters.Add(New SqlParameter("@Email", SqlDbType.NVarChar, 50))
        cmd.Parameters("@Email").Value = aluno.Email
        Try
            conn.Open()
            Dim registrosAfetados As Integer = cmd.ExecuteNonQuery
            Dim alunoId As Integer
            If Not (registrosAfetados = 0) Then
                alunoId = CType(cmd.Parameters("@AlunoID").Value, Integer)
            Else
                alunoId = -1
            End If
            conn.Close()
            Return alunoId
        Catch ex As SqlException
            Throw New ApplicationException("Erro de acesso aos dados")
        Finally
            conn.Close()
        End Try
    End Function

    Public Function UpdateAluno(ByVal aluno As AlunosDetalhes) As Integer

        Dim conn As SqlConnection = New SqlConnection(conexaoBD)
        Dim cmd As SqlCommand = conn.CreateCommand
        cmd.CommandType = CommandType.StoredProcedure
        cmd.CommandText = "procUpdateAluno"
        cmd.Parameters.Add(New SqlParameter("@AlunoID", SqlDbType.Int))
        cmd.Parameters("@AlunoID").Value = aluno.AlunoID

        cmd.Parameters.Add(New SqlParameter("@Nome", SqlDbType.NVarChar, 20))
        cmd.Parameters("@Nome").Value = aluno.Nome

        cmd.Parameters.Add(New SqlParameter("@Endereco", SqlDbType.NVarChar, 20))
        cmd.Parameters("@Endereco").Value = aluno.Endereco

        cmd.Parameters.Add(New SqlParameter("@Email", SqlDbType.NVarChar, 50))
        cmd.Parameters("@Email").Value = aluno.Email

        Try
            conn.Open()
            Dim registrosAfetados As Integer = cmd.ExecuteNonQuery
            Return registrosAfetados
        Catch ex As SqlException
            Throw New ApplicationException("Erro de acesso aos dados")
        Finally
            conn.Close()
        End Try
    End Function

    Public Function DeleteAluno(ByVal AlunoID As Integer) As Integer

        Dim conn As SqlConnection = New SqlConnection(conexaoBD)
        Dim cmd As SqlCommand = conn.CreateCommand
        cmd.CommandType = CommandType.StoredProcedure
        cmd.CommandText = "procDeleteAluno"
        cmd.Parameters.Add(New SqlParameter("@AlunoID", SqlDbType.Int))
        cmd.Parameters("@AlunoID").Value = AlunoID
        Try
            conn.Open()
            Dim registrosAfetados As Integer = cmd.ExecuteNonQuery
            conn.Close()
            Return registrosAfetados
        Catch ex As SqlException
            Throw New ApplicationException("Erro ao excluir Aluno.")
        Finally
            conn.Close()
        End Try

    End Function
 
    Public Function GetAluno(ByVal AlunoID As Integer) As AlunosDetalhes

        Dim conn As SqlConnection = New SqlConnection(conexaoBD)
        Dim cmd As SqlCommand = conn.CreateCommand
        cmd.CommandType = CommandType.StoredProcedure
        cmd.CommandText = "procGetAluno"
        cmd.Parameters.Add(New SqlParameter("@AlunoID", SqlDbType.Int))
        cmd.Parameters("@AlunoID").Value = AlunoID
        Try
            conn.Open()
            Dim dr As SqlDataReader = cmd.ExecuteReader
            Dim aluno As AlunosDetalhes
            If dr.Read Then
                aluno = New AlunosDetalhes(CType(dr("AlunoID"), Integer), CType(dr("AlunoNome"), String),  _ 
                                                         CType(dr("AlunoEndereco"), String), CType(dr("AlunoEmail"), String))
            Else
                aluno = Nothing
            End If
            dr.Close()
            conn.Close()
            Return aluno
        Catch ex As SqlException
            Throw New ApplicationException("Erro : " & Microsoft.VisualBasic.Chr(10) & "" + ex.Message)
        End Try
    End Function
 
    Public Function GetTodosAlunos() As AlunosDetalhes()
        Dim conn As SqlConnection = New SqlConnection(conexaoBD)
        Dim cmd As SqlCommand = conn.CreateCommand
        cmd.CommandType = CommandType.StoredProcedure
        cmd.CommandText = "procGetTodosAlunos"

        Dim arrrAluno As ArrayList = New ArrayList

        Try
            conn.Open()
            Dim dr As SqlDataReader = cmd.ExecuteReader
            Dim aluno As AlunosDetalhes

            If dr.HasRows Then
                While dr.Read
                    aluno = New AlunosDetalhes(CType(dr("AlunoID"), Integer), CType(dr("AlunoNome"), String), _ 
                                                              CType(dr("AlunoEndereco"), String), CType(dr("AlunoEmail"), String))
                    arrrAluno.Add(aluno)
                End While
            Else
                aluno = Nothing
            End If

            dr.Close()
            conn.Close()
            Return CType(arrrAluno.ToArray(GetType(AlunosDetalhes)), AlunosDetalhes())

        Catch ex As SqlException
            Throw New ApplicationException("Erro : " & Microsoft.VisualBasic.Chr(10) & "" + ex.Message)
        End Try
    End Function
End Class

A classe AcessoBD possui os seguintes métodos:

Os métodos para incluir, atualizar e excluir dados da tabela usam o método ExecuteNonQuery pois não retorna registros na operação. Para saber mais sobre este assunto leia o artigo: VB.NET - Operações com dados que não retornam registros.

Os métodos para obter dados da tabela usam o método ExecuteReader. Para mais detalhes acompanhe o artigo : VB.NET - Operações com dados que retornam registros.

A string de conexão com o banco de dados usada será armazenada usando o recurso My.Settings conforme os seguintes passos:

  1. Clique com o botão direito sobre My Project na janela Solution Explorer e selecione Open.
  2. Na janela a seguir selecione Settings e informe um nome para a string de conexão e para a string SQL na coluna Name. Eu usei os nomes strConn. Salve a operação. Pronto ! já podemos recuperar esta informação a partir de My.Settings em tempo de execução.

Estamos usando os seguintes namespaces nesta classe:

Imports System
Imports System.Data
Imports System.Data.SqlClient
Imports System.Collections
Imports System.Configuration

Com isto preparamos o terreno para criar a interface com o usuário e implementar as funcionalidades da aplicação.

Aguarde a continuação deste artigo em :  VB.NET 2005 - Criando uma aplicação completa via código III

Até o próximo artigo .NET 


José Carlos Macoratti