6
votes

Comment savoir si une instruction de mise à jour SQL a-t-elle été exécutée avec succès ou échoué?

Comment savoir si une instruction de mise à jour SQL a été exécutée avec succès ou échoué?

J'utilise SQL Server 2005 et C # ASP.NET.

Puis-je obtenir le succès ou l'infomation échouée dans C # sans ajouter du code SQL dans l'ancien relevé SQL?


2 commentaires

Dans le studio de gestion? Utiliser C #, Delphi, ...?


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


4 Réponses :


0
votes

Utilisation d'un bloc d'essai / attraper et peut-être que RAISError pour envoyer un message.

http://msdn.microsoft.com/en-us/library /ms179296.aspx

http://msdn.microsoft.com/en-us/library /ms178592.aspx


0 commentaires

15
votes

Vous pouvez utiliser @@ RowCount pour obtenir le nombre de lignes affecté par la dernière requête. Cela peut être utilisé pour décider si votre où la clause code> correspondait réellement quelque chose, par exemple.

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

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


0 commentaires

12
votes

Vous pouvez utiliser la valeur de retour de l'exécutenonquery pour vérifier si la mise à jour a été réussie 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();
        }


0 commentaires

1
votes

Qu'est-ce que "échoué" signifie?

Si vous avez échoué, une erreur a été générée - la syntaxe SQL, la contrainte ou la violation du FK - Testez / attraper, érayerror, etc.

ou, si par échec, vous voulez dire qu'aucune ligne de lignes n'a été mise à jour, la valeur de retour de l'exécutenonquery vous donnera une rangée si vous ne supprimez pas RowCount dans votre procédure stockée.


0 commentaires