IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

Comment éviter le message d'erreur causé par SqlDataSource dans une page aspx?


Sujet :

C#

  1. #1
    Membre du Club
    Homme Profil pro
    Analyse système
    Inscrit en
    Février 2021
    Messages
    77
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyse système
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2021
    Messages : 77
    Points : 51
    Points
    51
    Par défaut Comment éviter le message d'erreur causé par SqlDataSource dans une page aspx?
    Bonjour

    Je reçois une erreur par exemple:
    Cannot insert duplicate key row in object 'dbo.table1'.
    Je voudrais l'éviter et montrer mon propre message. J'ai essayé ceci mais ça ne marche pas.
    J'ai aussi essayé avec _Selecting et _DataBinding. Rien ne va.
    Merci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    using System;
    using System.Web.UI.WebControls;
    using System.Data.SqlClient;
     
    public partial class abonn_new : System.Web.UI.Page
    {
        protected void Page_Load(object sender, Event)
        {
            DetailsView1.Focus();
        }
     
        protected void SqlDataSource1_Selected(object sender, SqlDataSourceStatusEventArgs e)
        {
            try
            {
                // you can check if Select Command is blank etc., etc.,
            }
            catch
            (
            SqlException ex)
            {
                Console.WriteLine(ex.Message);
                Console.WriteLine("Mon propre message.");
            }
        }
    }

  2. #2
    Membre chevronné
    Homme Profil pro
    edi
    Inscrit en
    Juin 2007
    Messages
    898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : edi

    Informations forums :
    Inscription : Juin 2007
    Messages : 898
    Points : 1 915
    Points
    1 915
    Par défaut
    Il faut que tu soit plus précis sur ce que tu cherches à faire, pourquoi et en quoi tu n'obtiens pas le résultat escompté.

  3. #3
    Membre du Club
    Homme Profil pro
    Analyse système
    Inscrit en
    Février 2021
    Messages
    77
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyse système
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2021
    Messages : 77
    Points : 51
    Points
    51
    Par défaut
    Le problème est que l'index unique crée en sql server refuse les records identiques, d'où l'erreur. Le detailsview est en mode 'insert'.
    Voici le code en aspx:

    Code asp : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
     <asp:Label ID="Label2" runat="server" Text="Label"></asp:Label>
     
    <asp:DetailsView ID="DetailsView1" runat="server" DefaultMode="Insert" AutoGenerateRows="False" DataKeyNames="Inschr_nr" DataSourceID="SqlDataSource1" CellPadding="4" ForeColor="#333333" GridLines="None" >
                          <AlternatingRowStyle BackColor="White" ForeColor="#284775" />
                          <CommandRowStyle BackColor="#E2DED6" Font-Bold="True" />
                          <EditRowStyle BackColor="#999999" />
                          <FieldHeaderStyle BackColor="#E9ECF1" Font-Bold="True" />
                          <Fields>
                              <asp:BoundField DataField="Inschr_nr" HeaderText="Inschr_nr" InsertVisible="False" 			          ReadOnly="True" SortExpression="Inschr_nr" />
                              <asp:BoundField DataField="Lidnr" HeaderText="Lidnr" SortExpression="Lidnr" />
                              <asp:BoundField DataField="Taknr" HeaderText="Taknr" SortExpression="Taknr" />
                              <asp:CommandField ShowInsertButton="True" />
                          </Fields>
                          <FooterStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
                          <HeaderStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
                          <PagerStyle BackColor="#284775" ForeColor="White" HorizontalAlign="Center" />
                          <RowStyle BackColor="#F7F6F3" ForeColor="#333333" />
                       </asp:DetailsView>
     
    <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:sport %>" 
                        DeleteCommand="DELETE FROM [Inschrijvingen] WHERE [Inschr_nr] = @Inschr_nr" 
                        InsertCommand="INSERT INTO [Inschrijvingen] ([Lidnr], [Taknr] VALUES (@Lidnr, @Taknr)" 
                        UpdateCommand="UPDATE [Inschrijvingen] SET [Lidnr] = @Lidnr, [Taknr] = @Taknr WHERE [Inschr_nr] = @Inschr_nr" 
                        SelectCommand="SELECT * from [inschrijvingen]" OnSelected="SqlDataSource1_Selected">  
                          <DeleteParameters>
                               <asp:Parameter Name="Inschr_nr" Type="Int32" />
                           </DeleteParameters>
                           <InsertParameters>
                               <asp:Parameter Name="Lidnr" Type="Int32" />
                               <asp:Parameter Name="Taknr" Type="Int32" />
     
                           </InsertParameters>
                           <UpdateParameters>
                               <asp:Parameter Name="Lidnr" Type="Int32" />
                               <asp:Parameter Name="Taknr" Type="Int32" />
                               <asp:Parameter Name="Inschr_nr" Type="Int32" />
                           </UpdateParameters>
                       </asp:SqlDataSource>

    Et voici le code-behind:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    using System;
    using System.Web.UI.WebControls;
    using System.Data.SqlClient;
     
    public partial class abonn_new : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            DetailsView1.Focus();
        }
     
        protected void SqlDataSource1_Selected(object sender, SqlDataSourceStatusEventArgs e)
        {
            try
            {
                // you can check if Select Command is blank etc., etc.,
            }
            catch
            (
            SqlException ex)
            {
                Label2.Text = ex.Message;
            }
       }
    }

  4. #4
    Membre chevronné
    Homme Profil pro
    edi
    Inscrit en
    Juin 2007
    Messages
    898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : edi

    Informations forums :
    Inscription : Juin 2007
    Messages : 898
    Points : 1 915
    Points
    1 915
    Par défaut
    Je vois deux sujet : l'erreur d'insertion et la conversion de l'erreur technique en message pour l'utilisateur. Sur lequel demandes-tu de l'aide ?

  5. #5
    Membre du Club
    Homme Profil pro
    Analyse système
    Inscrit en
    Février 2021
    Messages
    77
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyse système
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2021
    Messages : 77
    Points : 51
    Points
    51
    Par défaut
    Je voudrais que n'importe quelle erreur (cannot insert duplicate, wrong type etc ...) soit captée et remplacée dans un Label par "l'insertion n'a pas pu se faire". par exemple.
    Merci

  6. #6
    Membre chevronné
    Homme Profil pro
    edi
    Inscrit en
    Juin 2007
    Messages
    898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : edi

    Informations forums :
    Inscription : Juin 2007
    Messages : 898
    Points : 1 915
    Points
    1 915
    Par défaut
    C'est étrange que tu n'aies pas déjà les erreurs d'insertion avec SqlException. Tu peux toujours ajouter une seconde clause catch basée sur la classe Exception, ça devrait intercepter tous les types d'exceptions qui ne sont pas des SqlException.

Discussions similaires

  1. [XL-365] Comment éviter le message d'erreur #EPARS!
    Par Philippe Tulliez dans le forum Contribuez
    Réponses: 0
    Dernier message: 11/09/2020, 12h15
  2. [Wamp] Comment éviter ce message d'erreur "apache http server a cessé de fonctionner et a été arrêté"?
    Par basboustunis dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 9
    Dernier message: 04/08/2014, 18h02
  3. Réponses: 0
    Dernier message: 23/01/2012, 13h50
  4. Comment éviter les messages d'erreur lors de requêtes SQL
    Par Pentos60 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 14/01/2011, 09h38
  5. Comment éviter les messages d'erreur
    Par curt dans le forum IHM
    Réponses: 3
    Dernier message: 28/08/2008, 18h39

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo