Ir para conteúdo

POWERED BY:

Arquivado

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

thi.ASP

Alguem usa o Commit e Rollback?

Recommended Posts

E ai pessoal, fmz?Vi que no SQL Server tem um comando de Commit para confirmar a inserção no Banco de Dados e outra de Rollback para voltar as alterações feitas! Sei que tem como fazer isso com ASP, com um ADODB.Command acho! alguem sabe como fazer por completo?Isso eh interessante à todos que usa BD pq se você tiver um caso de no final de um form você tiver que inserir os dados em várias tabela, caso aconteça algum erro os dados não ~são inseridos pela metade.... e sim apagam todos inseridos pela metade!Bom... estou estudando todas as caracteristicas desse comando no ASP, mas se alguem ja souber de algo seria interessante deixar postado para a galera!Abraço!

Compartilhar este post


Link para o post
Compartilhar em outros sites

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 :D

Compartilhar este post


Link para o post
Compartilhar em outros sites

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 :D

Boa Ricardo, realmente esse código eh mto bem vindo para uma inserção no BD em varias tabelas... acho q seria interessante publicar esse codigo na área de códigos do forum. Pode fazer isso? claro, pra manter seu nome como autor!Valeu!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.