none
DBTransaction em WebServices? RRS feed

  • Pergunta

  • Boa tarde,

    Estava trabalhando em um sistema em WPF que utiliza webservices, quando vi que ao digitar o nome do webservice tem um item DBTransaction. Minha dúvida é: É possível usar este item para transações de banco de dados, se sim, como funciona?

    Agradeço a atenção,

    Andre Ishihara


    • Editado André Ishihara segunda-feira, 12 de setembro de 2011 17:24 Informações
    segunda-feira, 12 de setembro de 2011 17:00

Todas as Respostas

  • Um webservice é uma aplicação normal... Não entendi a pergunta.

    <%@ WebService Language="C#" Class="WebService" %>
    
    using System;
    using System.Web;
    using System.Web.Services;
    using System.Web.Services.Protocols;
    using System.Data;
    using System.Data.SqlClient;
    
    
    [WebService(Namespace = "http://tempuri.org/")]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    public class WebService  : System.Web.Services.WebService {
    
      
        [WebMethod]
        public string ExecuteSqlTransaction(string connectionString)
        {
            using (SqlConnection connection = new SqlConnection(connectionString))
            {
                connection.Open();
    
                SqlCommand command = connection.CreateCommand();
                SqlTransaction transaction;
    
                // Start a local transaction.
                transaction = connection.BeginTransaction("SampleTransaction");
    
                // Must assign both transaction object and connection
                // to Command object for a pending local transaction
                command.Connection = connection;
                command.Transaction = transaction;
    
                try
                {
                    command.CommandText =
                        "Insert into Region (RegionID, RegionDescription) VALUES (100, 'Description')";
                    command.ExecuteNonQuery();
                    command.CommandText =
                        "Insert into Region (RegionID, RegionDescription) VALUES (101, 'Description')";
                    command.ExecuteNonQuery();
    
                    // Attempt to commit the transaction.
                    transaction.Commit();
                    Console.WriteLine("Both records are written to database.");
                }
                catch (Exception ex)
                {
                    Console.WriteLine("Commit Exception Type: {0}", ex.GetType());
                    Console.WriteLine("  Message: {0}", ex.Message);
    
                    // Attempt to roll back the transaction.
                    try
                    {
                        transaction.Rollback();
                    }
                    catch (Exception ex2)
                    {
                        // This catch block will handle any errors that may have occurred
                        // on the server that would cause the rollback to fail, such as
                        // a closed connection.
                        Console.WriteLine("Rollback Exception Type: {0}", ex2.GetType());
                        Console.WriteLine("  Message: {0}", ex2.Message);
                    }
                }
            }
    
            return "";
        }
        
    }
    

    Trecho de código: Interface IDbTransaction


    Paulo César Viana MCP - MCTS
    terça-feira, 13 de setembro de 2011 00:37
  • Boa noite,

    O objetivo é: Eu tenho um sistema em WPF com WebServices. Dentro do sistema eu tenho uma grid alimentada com dados que eu recebo do WS. Quando eu clico em um botão eu mando o WS executar uma proc de atualização dentro do banco de cada um dos itens selecionados na grid através de um foreach. Mas só posso confirmar o processo se todos os dados do loop forem atualizados com sucesso, caso contrario ele vai desfazer as alterações. Eu não sei fazer isso usando webservices. Sei fazer isso usando classes. Alguém pode ajudar com isso?

    terça-feira, 13 de setembro de 2011 20:42
  • André,

    Quando você vai realizar uma operação de banco que envolve uma transação, como é?

    Inicia >> BeginTransaction()

    algumaCoisa.Cadastrar(objeto_carregado_com_varios_intens_ou_1)

    Sucesso >> Commit();

    Se Erro >> transaction.Rollback()

    São vários insert's?? Olha o esboço:

     

    try
    {
             List<string> lista = new List<string>();
                    
             BeginTransaction();   
                    
             foreach (string algo in lista)
             {
                     SuaClasseAlgumaCoisa.Gravar_Alguma_Coisa(algo);
             }
     
            Commit();
                
    }
    catch (Exception)
    {
             Rollback();
    }
    



    Paulo Viana
    terça-feira, 13 de setembro de 2011 21:58
  • Algo nesse sentido.

    Então tenho que criar funções no webservice para: abrir, commit e rollback?

    quarta-feira, 14 de setembro de 2011 17:05