2010-06-03 7 views
3

Comment savoir si une instruction sql Update a été exécutée avec succès ou a échoué? J'utilise sql server 2005 et C# asp.net. Puis-je obtenir l'infomation réussie ou échouée en C# sans ajouter de code SQL dans l'ancienne instruction SQL?Comment savoir si une instruction sql Update a été exécutée avec succès ou a échoué?

+0

Dans le studio de gestion? En utilisant C#, Delphi, ...? –

+0

Pouvez-vous être plus précis? Où exécutez-vous la mise à jour? Est-ce une application ou juste un studio de gestion ou quoi? Si c'est une application, que de quel genre? Quelle langue utilisez-vous? Mais généralement, si cela échoue, vous obtiendrez une erreur, vous devriez donc avoir un gestionnaire d'erreur :) – hgulyan

Répondre

8

Vous pouvez utiliser la valeur de retour de ExecuteNonQuery pour vérifier si la mise à jour a réussi ou non.

SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString); 
     SqlCommand cmd = new SqlCommand("sp_updateData", con); 
     cmd.CommandType = CommandType.StoredProcedure; 
     SqlParameter p1 = new SqlParameter("@id", SqlDbType.Int); 
     p1.Value = 1; 
     p1.Direction = ParameterDirection.Input; 

     SqlParameter p2 = new SqlParameter("@name", SqlDbType.VarChar,50); 
     p2.Value = "sls"; 
     p2.Direction = ParameterDirection.Input; 

     cmd.Parameters.Add(p1); 
     cmd.Parameters.Add(p2); 

     try 
     { 
      con.Open(); 
      //count will be the number of rows updated. will be zero if no rows updated. 
      int count = cmd.ExecuteNonQuery(); 
      if (count > 0) 
      { 
       Console.WriteLine("Update Success!!!"); 
      } 
      else 
      { 
       Console.WriteLine("No Updates!!!"); 
      } 
      Console.ReadLine(); 

     } 
     catch (SqlException ex) 
     { 
      Console.WriteLine("Update Failed coz.. " + ex.Message); 
     } 
     finally 
     { 
      con.Close(); 
     } 
8

Vous pouvez utiliser @@ROWCOUNT pour obtenir le nombre de lignes affectées par la dernière requête. Cela peut être utilisé pour décider si votre clause WHERE correspond réellement à quelque chose, par exemple.

UPDATE mytable SET 
    field = 'SomeValue' 
WHERE 
    id = 1234 

IF @@ROWCOUNT = 0 
BEGIN 
    -- No row with id=1234 
END 
1

Que signifie 'échoué'?

Si vous avez échoué, cela signifie qu'une erreur a été générée - SQL Syntaxe, contrainte - ou violation FK - puis TRY/CATCH, RAISEERROR, etc. sont des options. Ou, si vous avez échoué, vous voulez dire qu'aucune ligne n'a été mise à jour, la valeur de retour de ExecuteNonQuery vous donnera un nombre de lignes si vous ne supprimez pas rowcount dans votre procédure stockée.

Questions connexes