2012-11-16 1 views
0

Chaque fois que j'utilise le débogueur, une de mes procédures stockées est exécutée, même lorsque j'arrête le débogueur avant d'atteindre la ligne de code chargée d'enregistrer les données dans la base de données.Empêcher l'exécution de la procédure stockée lors du débogage

Comment est-ce que je pourrais empêcher ceci de se produire? Je ne veux pas avoir de lignes incomplètes dans la base de données.

POrder po = new POrder();   
po.PODate = DateTime.Parse(txtPODate.Text); <-- Breakpoint here 

po.POVendorID = int.Parse(ddPOVendors.SelectedValue); <-- Stop Debugging here 

Je ne touchais po.AddNewOrder encore et j'arrête le débogueur, donc je ne suis pas l'exécution de la procédure stockée encore

po.AddNewOrder(); 

POrder Classe:

public DateTime PODate { get; set; } 
    public int POVendorID { get; set; } 

    public void AddNewOrder() 
    { 
     SqlConnection con = new SqlConnection(ss.GetConectionString()); 

     SqlCommand cmd = new SqlCommand("uspAddNewPOrder", con); 
     cmd.CommandType = CommandType.StoredProcedure; 

     SqlParameter parPODate = new SqlParameter("@PODate", SqlDbType.Date); 
     parPODate.Value = PODate; 
     cmd.Parameters.Add(parPODate); 

     SqlParameter parPOVendorID = new SqlParameter("@POVendorID", SqlDbType.Int); 
     parPOVendorID.Value = POVendorID; 
     cmd.Parameters.Add(parPOVendorID); 

     try 
     { 
      con.Open(); 
      cmd.ExecuteNonQuery(); 
     } 
     catch (Exception exp) 
     { 
      throw new Exception(exp.Message.ToString()); 
     } 
     finally 
     { 
      cmd.Dispose(); 
      con.Close(); 
     } 
    } 

Code de procédure stockée:

ALTER PROCEDURE [dbo].[uspAddNewPOrder] 
(
     @PODate datetime = null, 
     @POVendorID int= null 
) 
AS 
BEGIN 
    INSERT INTO PurchaseOrders.[dbo].[tblPurchaseOrders] 
    (
     PODate, 
     POVendorID 

    ) 
    VALUES 
    (
     @PODate, 
     @POVendorID 
    ) 
END 
+1

Envelopper l'appel dans une transaction? –

+2

Ce qui se passe probablement, c'est que vous laissez votre navigateur ouvert avec le 'serveur de développement ASP.NET ', et même si vous avez arrêté le débogage votre navigateur termine sa demande. –

+0

@Bob Vale Merci, Comment je pouvais faire ça? – laspalmos

Répondre

1

Vous pouvez utiliser preprocessor directives pour ignorer des sections de code exécutées en fonction d'une condition (ex; pendant le débogage dans votre cas). Jetez un oeil à ce MSDN link

#define DEBUG 
public class YourClass 
{ 
    POrder po = new POrder();   
    po.PODate = DateTime.Parse(txtPODate.Text); 
    Break point here -> 

    po.POVendorID = int.Parse(ddPOVendors.SelectedValue); 
    #if (!DEBUG) 
     po.AddNewOrder(); //this will not be executed during debug. 
    #endif 
    ....  
} 
+1

Je ne suis pas sûr que c'est ce qu'il demande ... il dit que quand il débogue, il va traverser un problème et arrêter son débogueur avant l'appel de 'po.AddNewOrder()', mais cette ligne est toujours exécutée . Je pense qu'il veut l'exécuter lors du débogage s'il lui permet d'atteindre la ligne. –

+1

@Kaf merci c'est utile et cela résoudrait le problème, mais je suis en train de tester pour le comportement des différents utilisateurs et à un moment donné je voudrais utiliser cette ligne et être exécuté. – laspalmos

Questions connexes