2009-09-07 3 views
1

J'utilise VB.NET et sous le code sur l'événement de clic de bouton.Comment arrêter d'insérer le même enregistrement dans le tableau en utilisant vb.net

Protected Sub ibtnSendInvites_Click(ByVal sender As Object, ByVal e As System.Web.UI.ImageClickEventArgs) Handles ibtnSendInvites.Click 
     Try 
      Dim emailList As New List(Of String) 
      Dim conString As String = WebConfigurationManager.ConnectionStrings("LocalSqlServer").ConnectionString 
      Dim con As New SqlConnection(conString) 
      con.Open() 
      Dim cmd As SqlCommand 
      For Each curRow As GridViewRow In GridView1.Rows 
       Dim chkSelect As CheckBox = CType(curRow.Cells(1).FindControl("chkSelect"), CheckBox) 
       Dim emailLabel As Label = CType(curRow.Cells(1).FindControl("lblEmailAddress"), Label) 
       If chkSelect.Checked Then 
        emailList.Add(emailLabel.Text) 
        cmd = New SqlCommand("uspInsertDelegate", con) 
        cmd.CommandType = CommandType.StoredProcedure 
        cmd.Parameters.Add("@CourseID", SqlDbType.Int).Value = Session("CourseID") 
        cmd.Parameters.Add("@CPUserID", SqlDbType.Int).Value = CType(curRow.Cells(1).FindControl("lblCPUserID"), Label).Text 
        cmd.Parameters.Add("@StatusID", SqlDbType.Int).Value = 25 
        cmd.Parameters.Add("@CreateUser", SqlDbType.VarChar).Value = Session("LoggedInUser") 
        cmd.ExecuteNonQuery() 
       End If 
      Next 
      For Each email As String In emailList 
       Dim message As String = "Please confirm your booking " 
       Dim subject As String = "UserPoint Course Booking Invitation Email" 
       Dim from As String = "[email protected]" 
       SendEmail.SendMessage(subject, message, from, email, "") 
      Next 
     Catch ex As Exception 

     End Try 
    End Sub 

Je veux jeter exception si l'utilisateur tente d'insérer un même enregistrement ayant même CourseID et CPUserID.

+0

Cochez cette case: [Arrêter d'insérer dans la table si l'enregistrement existe déjà] (http://stackoverflow.com/questions/1388235/stop-inserting-in-table-if-record-already-exists) – Shoban

Répondre

2

Put a unique indexsur la table DATABASE sur ces deux colonnes. Vous obtiendrez une exception si vous essayez d'insérer un doublon.

CREATE UNIQUE INDEX IDX_Course_UserId_Delegate 
    ON Delegate (CourseID,CPUserID) 

Ou modifier le Sp de vérifier d'abord

Ou Ajouter un déclencheur d'insertion sur la base de données qui soulèvera et exception.

Ok dans vos prises

Throw New Exception("CANNOT INSERT DUPLICATE TROW", ex) 
+0

Thanks !, puis-je avoir un exemple de code en utilisant mon code ci-dessus? –

+0

Cher mais je peux avoir de nombreux ID de cours avec différents cpuserid vice versa –

+0

C'est ok. Ce qui précède signifie simplement que seule une ligne unique avec les deux valeurs sera autorisée, toute autre permutation est autorisée. –

0

Deux options vraiment - interroger la table d'abord pour voir si la ligne existe et lancer une exception personnalisée (envelopper le tout dans une transaction), ou appliquer ce dans le DB avec une contrainte/index unique (vous devriez le faire de toute façon). La base de données renvoie alors une erreur lorsque vous l'essayez ...

+0

Merci, je peux avoir exemple de code en utilisant mon ci-dessus code? –

+0

Merci Cher pour votre aide! –

1

Au lieu de l'obtenir pour émettre une exception, vous pouvez modifier votre procédure stockée "uspInsertDelegate" pour vérifier si la ligne existe déjà avant d'essayer de faire l'insertion, et rendre compte si oui ou non il l'a fait.

Je voudrais également créer l'index unique dans la base de données comme le dit Preet, juste pour être du bon côté.

+0

J'ai créé Unique Index sur la colonne, ainsi que vérifié dans mon proc en utilisant SI NON EXISTS (SELECT * FROM tblDelegate WHERE CourseID = @CourseID et CPUserID = @CPUserID) avant de l'insérer, maintenant comment dois-je afficher le message à l'utilisateur que les enregistrements ne peuvent pas être insérés car il est déjà présent dans la table –

Questions connexes