Fórum Enterprise Library 4.1 #12202

27/11/2009

0

Gostaria de saber se quando se usa a ENTERPRISE LIBRARY para acesso a dados, ela trata de TRANSAÇÕES (commit, rollback) e também de CONCORRÊNCIA entre usuários automaticamente, me mande um exemplo dos dois casos?
Jarminiane Batista

Jarminiane Batista

Responder

Posts

27/11/2009

Luiz Maia

Para baixar : http://msdn.microsoft.com/en-us/library/cc467894.aspx   Exemplo de Transação com Enterprise Library:   // This function takes arguments for 2 connection strings and commands to create a transaction
// involving two SQL Servers. It returns a value > 0 if the transaction is committed, 0 if the
// transaction is rolled back. To test this code, you can connect to two different databases
// on the same server by altering the connection string, or to another 3rd party RDBMS by
// altering the code in the connection2 code block.
static public int CreateTransactionScope(
    string connectString1, string connectString2,
    string commandText1, string commandText2)
{
    // Initialize the return value to zero and create a StringWriter to display results.
    int returnValue = 0;
    System.IO.StringWriter writer = new System.IO.StringWriter();     try
    {
        // Create the TransactionScope to execute the commands, guaranteeing
        // that both commands can commit or roll back as a single unit of work.
        using (TransactionScope scope = new TransactionScope())
        {
            using (SqlConnection connection1 = new SqlConnection(connectString1))
            {
                // Opening the connection automatically enlists it in the
                // TransactionScope as a lightweight transaction.
                connection1.Open();                 // Create the SqlCommand object and execute the first command.
                SqlCommand command1 = new SqlCommand(commandText1, connection1);
                returnValue = command1.ExecuteNonQuery();
                writer.WriteLine("Rows to be affected by command1: ", returnValue);                 // If you get here, this means that command1 succeeded. By nesting
                // the using block for connection2 inside that of connection1, you
                // conserve server and network resources as connection2 is opened
                // only when there is a chance that the transaction can commit.  
                using (SqlConnection connection2 = new SqlConnection(connectString2))
                {
                    // The transaction is escalated to a full distributed
                    // transaction when connection2 is opened.
                    connection2.Open();                     // Execute the second command in the second database.
                    returnValue = 0;
                    SqlCommand command2 = new SqlCommand(commandText2, connection2);
                    returnValue = command2.ExecuteNonQuery();
                    writer.WriteLine("Rows to be affected by command2: ", returnValue);
                }
            }
        }         // The Complete method commits the transaction. If an exception has been thrown,
        // Complete is not  called and the transaction is rolled back.
        scope.Complete();
    }
    catch (TransactionAbortedException ex)
    {
        writer.WriteLine("TransactionAbortedException Message: ", ex.Message);
    }
    catch (ApplicationException ex)
    {
        writer.WriteLine("ApplicationException Message: ", ex.Message);
    }     // Display messages.
    Console.WriteLine(writer.ToString());     return returnValue;
}   Fonte: http://msdn.microsoft.com/en-us/library/system.transactions.transactionscope.aspx   Abraços   Qualquer duvida, me diga, ok?   Abraços Att Luiz Maia    
Responder

Gostei + 0

27/11/2009

Jarminiane Batista

E UM EXEMPLO SOBRE CONCORRÊNCIA DE USUÁRIOS UTILIZANDO A ENTERPRISE LIBRARY 4.1
Responder

Gostei + 0

27/11/2009

Luiz Maia

Como assim Concorrencia de Usuarios, poderia me explicar melhor? Se for quanto acesso, o proprio ADO no DAAB e o sql fazem isto nativamente. E usando pool de conexão, voce elimina qualquer tipo de atrito entre conexõs simultaneas...   Aguardo Att   Luiz Maia
Responder

Gostei + 0

27/11/2009

Jarminiane Batista

Concorrência entre usuários.   Olha só extrai o texto abaixo do site www.macoratti.net   O que acontece quando dois usuários tentam atualizar o mesmo registro: Como ADO.NET usa a arquitetura desconectada de dados o gerenciador do banco de dados (DBMS) não tem como prever o que esta acontecendo pois após obter os dados do banco de dados a conexão é fechada. Quando dois usuários tentam atualizar o mesmo registro em uma tabela no banco de dados ao mesmo tempo , as alterações de um dos usuários poderá ser sobreposta pelas alterações do outro. Como isto vai ocorrer dependerá do modo como você esta tratando a concorrência. Na concorrência otimista o programa verifica se o registro da tabela do banco de dados que esta sendo atualizado ou excluído sofreu alterações desde de que ele foi obtido do banco de dados. Se houve alterações é disparada uma exceção devido a concorrência  e as alterações ou exclusões serão recusadas. Você terá que tratar as exceções !!! Se você não estiver usando a concorrência otimista não há verificação nenhuma e a operação irá ser processada sem disparar nenhuma exceção. Ocorrerá as sobreposição da última alteração sobre as demais feitas anteriormente. Como evitar os erros devido a concorrência : Para muitas aplicações os erros devido a concorrência raramente ocorrem. Como resultado , a concorrência otimista é o método adequado a usar pois o usuários dificilmente terão sua atualizações ou exclusões recusadas. Se a concorrência for um problema você pode realizar atualizações frequentes via DataSet no banco de dados , isto torna a ocorrência de de erros devido a concorrência mais difícil de ocorrer. Outra forma de evitar os erros devido a concorrência é obter e atualizar somente um registro por vez. Com isto haverá uma chance menor de dois usuários retornarem ou atualizarem o mesmo registro ao mesmo tempo. Ai minha pergunta é como trato isto na minha aplicação, especificamente utilizando a ENTERPRISE LIBRARY 4.1.
Responder

Gostei + 0

27/11/2009

Luiz Maia

Vc não trata isto, a biblioteca do ADO.net faz isto. Agora, se seu sistema é muito critico quanto a atualização de dados, não trabalhe com coleções desconectadas, apenas as conectadas, mas isto acaba com performance.   Abraços Att Luiz Maia
Responder

Gostei + 0

30/11/2009

Jarminiane Batista

Obrigado pela ajuda, pode encerrar o chamado.   Abraços,   Jarminiane A. Batista (Jardim)
Responder

Gostei + 0

30/11/2009

Luiz Maia

OK Sr. Jarminiane,   Precisando de algo não exite em nos contactar, continuamos a sua disposição.   Abraços e sucesso em seu projeto! Att Luiz Maia
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar