Visual Basic em Português

Página pessoal de Jorge Paulino sobre o Visual Basic (VB.NET, ASP.NET, VB6, VBA) e algumas noticias de tecnologia

VB.NET: Classe SqlTransaction

Esta classe, SqlTransaction(), não é uma novidade das últimas versões da plataforma .NET, mas mesmo assim, não é usada por muitos programadores, sendo ela tão útil para comandos T-SQL dependentes.

Numa perspectiva geral, é criado um objecto SqlTransaction() chamando o método BeginTransaction() da classe SqlConnection(). A partir daqui, todas as operações são efectuadas na SqlTransaction() e, chamando o método Commit(), irá tentar executar todas as operações na base de dados SQL. Caso não consiga, pode-se então chamar o método Rollback() que irá tentar anular todas as alterações planeadas.

Imaginemos que queremos inserir os dados de um formulário em tabelas diferentes, ou seja, alguns dados vão para uma tabela e outros dados para outra(s) tabela(s). Estes dados têm de estar relacionados(ID) caso contrário não existe correspondência entre eles. O facto de não se conseguir escrever em qualquer uma das tabelas, pode assim comprometer a integridade dos dados.

Fica aqui um pequeno exemplo de como podemos evitar este problema:

    Dim connString As String = "connection string de ligação ao SQL"
    Dim transaction As SqlClient.SqlTransaction = Nothing

    ' Ligação à base de dados
    Using conn As New SqlClient.SqlConnection(connString)
      conn.Open()

      Try

        ' Define o comando e a transacção
        Using command As SqlClient.SqlCommand = conn.CreateCommand()
          transaction = conn.BeginTransaction


          ' Faz diversas operações em diferentes tabelas, usando
          ' comandos T-SQL(UPDATE e INSERT), StoredProcedures, etc
          With command

            ' Define a ligação e transacção para o SqlCommand
            .Connection = conn
            .Transaction = transaction


            ' ---------------------------------------------------------
            ' Actualiza a 1ª tabela (Tabela 1)
            ' ---------------------------------------------------------
            .CommandType = CommandType.Text
            .CommandText = "UPDATE tabela1 SET anulado=1 WHERE id=@id;"
            .Parameters.Add("@id", SqlDbType.Int).Value = 123
            .ExecuteNonQuery()
            .Parameters.Clear()


            ' ---------------------------------------------------------
            ' Insere a 2ª tabela (Tabela 2) neste caso através
            '  de um StoredProcedure e o método ExecuteScalar()
            ' ---------------------------------------------------------
            .CommandType = CommandType.StoredProcedure
            .CommandText = "sp_tabela2"
            .Parameters.Add("@a", SqlDbType.VarChar).Value = "abc"
            .Parameters.Add("@b", SqlDbType.VarChar).Value = "def"

            Dim lastID As Integer = Integer.Parse(.ExecuteScalar())
            .Parameters.Clear()


            ' ---------------------------------------------------------
            ' Insere na 3ª tabela (Tabela 3) usando o resultado anterior
            ' ---------------------------------------------------------
            .CommandType = CommandType.Text
            .CommandText = "INSERT INTO tabela3 (ID) VALUES (@ID)"
            .Parameters.Add("@ID", SqlDbType.Int).Value = lastID
            .ExecuteNonQuery()

          End With

          ' Tenta gravar as actualizações na base de dados
          transaction.Commit()

          MessageBox.Show("Actualização efectuada com sucesso!")
        End Using

      Catch ex As Exception

        Try

          ' Caso ocorra um erro tenta fazer o Rollback() ou
          ' seja, cancelar as modificações que estão pendentes
          transaction.Rollback()
          Exit Try

        Catch ex2 As Exception
          MessageBox.Show(ex2.Message)
        End Try

        ' Informação geral do erro, mas com as modificações já canceladas
        MessageBox.Show(ex.Message)

      End Try

    End Using
    transaction.Dispose()

 

Simples de utilizar, e muito útil, garantido desta forma que todas as transacções são efectuadas, e caso contrário, serão canceladas, não ficando assim, dados sem correspondência.


Visual Studio 2010 – Vídeos

Estão disponíveis no MSDN alguns vídeos sobre o Visual Studio 2010, que mostram as principais novidades/funcionalidades do Visual Basic 10 e C# 4. Estes são alguns dos que já estão disponíveis e que fazem parte da série “How Do I”:

Existem ainda mais recursos, disponibilizados no blog de Beth Massi (Senior Program Manager na Visual Studio Community Team - Microsoft): VS 2010 code samples and walkthroughs.


Microsoft TechDays 2010

Já é público o próximo grande evento técnico da Microsoft. É destinado a todos os profissionais que trabalham em tecnologias de informação, sejam ligados à administração de sistemas, desenvolvimento de software, gestão de projecto ou de departamentos de sistemas de informação.

Este ano irá decorrer nos dias 20,21 e 22 de Abril, com mais de 40 oradores e sobre diversas tecnologias como Visual Studio, Silverlight, WPF, Exchange, SQL Server, Windows 7, Sharepoint, etc.

Até dia 5 de Março, Early Bird, o preço da inscrição é de 150€, sendo 225€ após essa data.

Um evento a não perder!


Visual Studio 2010 and .NET Framework 4 Release Candidate

Já está disponível desde dia 8 de Fevereiro, para quem tem uma subscrição MSDN, o Visual Studio 2010 and .NET Framework 4 Release Candidate. A versão pública, para quem não tem uma subscrição MSDN, vai estar disponível já no dia 10 de Fevereiro.

Para quem instalar o VS2010-RC, existe um questionário que a Microsoft agradece a participação. Pode ser preenchido no seguinte endereço: Instructions for Survey




Microsoft Office Especialist

Membro da Comunidade
Experts-Exchange


Administ. da Comunidade
Portugal-a-Programar



Twitter

Artigos no CodeProject

Artigos no CodeProject

Subscrever Novidades

Endereço de Email:

Delivered by FeedBurner

Seguidores

Histórico