Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

ricardo.cunha

Uso do BeginTrans junto com Commit e Rollback

Recommended Posts

Atendendo ao pedido do nosso amigo thi.ASP estou postando esse código aqui. :D

 

Nesse código temos um exemplo de como se usar o BeginTrans e o CommitTrans ou o RollbackTrans do ASP. Dessa forma podemos desfazer uma operação no banco caso tenha ocorrido algum erro.

 

Bem, eu sempe uso esse Comandos pelo ASP ao utilizar SPs para Inserir no BD. Tenho vários exemplos, então resolvi comentar um código aqui para que consiga entender melhor:

 

'Conexãoset Conn = CreateObject("ADODB.Connection")Conn.ConnectionTimeout = 120Conn.CommandTimeout = 3000Conn.Open "Provider=sqloledb;user id=usuario;password=senha;Initial Catalog=semoerbr;data source=seudatasource"'Nesse Momento é efetuado o Begin Transaction, todas as operações feitas 'a partir deste ponto poderão ser desfeitas ou efetivadas utilizando ''rollback ou commit respectivamente.Conn.BeginTrans'Criação do ObjetoSet StoredProcedure = Server.CreateObject("ADODB.Command")With StoredProcedure'Definimos a Conexão que o Objeto irá utilizar .ActiveConnection = Conn'Neste Ponto estamos definindo o tipo de comando que iremos usar, 'no nosso caso estaremos utilizando Stored Procedures.CommandType = &H0004 'adCmdStoredProc'Definimos o nome da Procedure a ser utilizada.CommandText = "SPInserirUsuario"'Definimos os parametros.Parameters("@NOUsuario") = "Ricardo Cunha"'Neste Ponto temos um Parametro que será utilizando como Retorno'mas mesmo assim precisamos atribuir a ele um valor diferente de NULL.Parameters("@CDUsuario") = 0'Executamos a Procedure .ExecuteEnd With'Neste Ponto estou recebendo uma variável de Retorno, no meu caso 'CDUsuario é um campo de Auto Incremento por isso preciso receber 'esse Retorno, dessa forma não há a necessidade de fazer um ''Select Max(CDUsuario) só pra pegar o ultimo código inserido.CDUsuario = StoredProcedure.Parameters("@CDUsuario")'Neste ponto Estou executando uma segunda procedure, 'da mesma forma que a primeira With StoredProcedure.ActiveConnection = Conn.CommandType = &H0004 'adCmdStoredProc.CommandText = "SPInserirLogin".Parameters("@CDUsuario") = CDUsuario.Parameters("@DSSenha") = "senha".ExecuteEnd With'Verifico se ocorreu algum Erro, caso tenha ocorrido algum erro, 'eu desfaço as operaçõesIf Err <> 0 ThenConn.RollbackTransResponse.Write Err.DescriptionelseConn.CommitTransEnd If
Um exemplo Simples, nesse caso se não utilizassemos esse método correriamos o Risco de Inserir um Usuário no BD sem Inserir o mesmo na Tabela de Login.

 

Nota: Sempre que utilizar um BeginTransaction Nunca se esqueça de finalizar esse comando, pois se não o banco ficará com um Lock esperando um comando de encerramento.

 

Qualquer duvida, to por aqui

 

Estou preparando uns exemplo de ASP+XML+XSL, aguardem.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Atendendo ao pedido do nosso amigo thi.ASP estou postando esse código aqui. :D

 

Nesse código temos um exemplo de como se usar o BeginTrans e o CommitTrans ou o RollbackTrans do ASP. Dessa forma podemos desfazer uma operação no banco caso tenha ocorrido algum erro.

 

Bem, eu sempe uso esse Comandos pelo ASP ao utilizar SPs para Inserir no BD. Tenho vários exemplos, então resolvi comentar um código aqui para que consiga entender melhor:

------------

'Conexão

set Conn = CreateObject("ADODB.Connection")

Conn.ConnectionTimeout = 120

Conn.CommandTimeout = 3000

Conn.Open "Provider=sqloledb;user id=usuario;password=senha;Initial Catalog=semoerbr;data source=seudatasource"

 

'Nesse Momento é efetuado o Begin Transaction, todas as operações feitas

'a partir deste ponto poderão ser desfeitas ou efetivadas utilizando '

'rollback ou commit respectivamente.

Conn.BeginTrans

 

'Criação do Objeto

Set StoredProcedure = Server.CreateObject("ADODB.Command")

 

With StoredProcedure

 

'Definimos a Conexão que o Objeto irá utilizar

.ActiveConnection = Conn

 

'Neste Ponto estamos definindo o tipo de comando que iremos usar,

'no nosso caso estaremos utilizando Stored Procedures

.CommandType = &H0004 'adCmdStoredProc

 

'Definimos o nome da Procedure a ser utilizada

.CommandText = "SPInserirUsuario"

 

'Definimos os parametros

.Parameters("@NOUsuario") = "Ricardo Cunha"

'Neste Ponto temos um Parametro que será utilizando como Retorno

'mas mesmo assim precisamos atribuir a ele um valor diferente de NULL

.Parameters("@CDUsuario") = 0

 

'Executamos a Procedure

.Execute

 

End With

 

'Neste Ponto estou recebendo uma variável de Retorno, no meu caso

'CDUsuario é um campo de Auto Incremento por isso preciso receber

'esse Retorno, dessa forma não há a necessidade de fazer um '

'Select Max(CDUsuario) só pra pegar o ultimo código inserido.

CDUsuario = StoredProcedure.Parameters("@CDUsuario")

 

'Neste ponto Estou executando uma segunda procedure,

'da mesma forma que a primeira

With StoredProcedure

 

.ActiveConnection = Conn

.CommandType = &H0004 'adCmdStoredProc

.CommandText = "SPInserirLogin"

 

.Parameters("@CDUsuario") = CDUsuario

.Parameters("@DSSenha") = "senha"

 

.Execute

 

End With

'Verifico se ocorreu algum Erro, caso tenha ocorrido algum erro,

'eu desfaço as operações

If Err <> 0 Then

Conn.RollbackTrans

Response.Write Err.Description

else

Conn.CommitTrans

End If

-------------------------------

Um exemplo Simples, nesse caso se não utilizassemos esse método correriamos o Risco de Inserir um Usuário no BD sem Inserir o mesmo na Tabela de Login.

 

Nota: Sempre que utilizar um BeginTransaction Nunca se esqueça de finalizar esse comando, pois se não o banco ficará com um Lock esperando um comando de encerramento.

 

Qualquer duvida, to por aqui

 

Estou preparando uns exemplo de ASP+XML+XSL, aguardem.

Valeu Ricardo, acho que será mto util para o pessoal q usa o ASP com Banco de Dados.

 

Abraço!

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.