如何使用vb.net停止在表中插入相同的记录
我正在使用VB.NET和下面的代码处理按钮单击事件如何使用vb.net停止在表中插入相同的记录,vb.net,Vb.net,我正在使用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 A
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 = "admin@userpoint.com"
SendEmail.SendMessage(subject, message, from, email, "")
Next
Catch ex As Exception
End Try
End Sub
如果用户试图在数据库表的这两列上插入具有相同CourseID和CPUserID的相同记录,我想抛出异常。如果您尝试插入重复项,将返回异常
CREATE UNIQUE INDEX IDX_Course_UserId_Delegate
ON Delegate (CourseID,CPUserID)
或者将Sp更改为先检查
或者在DB上添加一个insert触发器,该触发器将引发异常
好的,我来接你
Throw New Exception("CANNOT INSERT DUPLICATE TROW", ex)
实际上有两个选项-首先查询表以查看该行是否存在,然后抛出一个自定义异常,将整个事务包装到事务中,或者在DB中使用唯一的约束/索引强制执行此操作。无论如何,您都应该这样做。然后,当您尝试插入时,DB将发回一个错误…而不是让它引发异常。您可以更改存储过程uspInsertDelegate,在尝试执行插入之前检查该行是否已存在,并报告它是否执行了该操作
为了安全起见,我也会像Preet所说的那样在数据库中创建唯一的索引。亲爱的,但是我可以有许多课程id,它们具有不同的cpuserid,这没关系。以上只是意味着只允许具有两个值的唯一行,允许任何其他排列。我在sql server进程中控制这一点,只是如果用户尝试插入相同的记录,我想抛出异常消息我已在两个列上创建了唯一索引,除了在我的过程中使用IF NOT EXISTS SELECT*FROM tblDelegate在插入前CourseID=@CourseID和CPUserID=@CPUserID外,现在我应该如何向用户显示无法插入记录的消息,因为它已经存在于表中检查此问题: