Asp.net 如何获取刚刚删除的记录的ID?
此代码用于获取已删除记录的ID、删除该记录的用户以及删除该记录的日期和时间,并将其插入主机表中 到目前为止,一旦删除了一条记录,代码就会捕获多条已删除的记录 请查看我的代码和我做错了什么 非常感谢你的帮助Asp.net 如何获取刚刚删除的记录的ID?,asp.net,vb.net,Asp.net,Vb.net,此代码用于获取已删除记录的ID、删除该记录的用户以及删除该记录的日期和时间,并将其插入主机表中 到目前为止,一旦删除了一条记录,代码就会捕获多条已删除的记录 请查看我的代码和我做错了什么 非常感谢你的帮助 Protected Sub GridView1_RowDeleted(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewDeletedEventArgs) Handles GridView1.Row
Protected Sub GridView1_RowDeleted(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewDeletedEventArgs) Handles GridView1.RowDeleted
Dim connStr As String = ConfigurationManager.ConnectionStrings("Constr").ConnectionString
Dim cnn As SqlConnection
Dim cmd As SqlCommand
Dim sql As String = ""
' Indicate whether the delete operation succeeded.
If e.Exception Is Nothing Then
Dim strID As String = GridView1.FindControl("ID").Cells(1).Text
'Who deleted a record?
sql += "Insert into Archives ([ID],[choice],[date_stamp],[approved],[chcknum],[DeletedBy],[dateDeleted]) "
sql += " SELECT [ID],[choice],[date_stamp],[approved],[chcknum],[login],getDate() from Depends "
sql += " inner join Emp on Depends.employee_id = Emp.employee_id where login ='" & Session.Item("UserName").ToString & "' and upass = '" & Session.Item("Password").ToString & "' and [ID] = '" & strID & "' "
End If
Response.Write(sql)
Response.End()
Try
cnn = New SqlConnection(connStr)
cnn.Open()
cmd = New SqlCommand(sql, cnn)
cmd.ExecuteNonQuery()
cmd.Dispose()
sql = ""
Catch ex As SqlException
Dim errorMsg As String = "Error in Updation"
errorMsg += ex.Message
Throw New Exception(errorMsg)
Finally
cnn.Close()
End Try
End Sub
我认为我的问题在于这一行代码:
Dim strID As String=GridView1.FindControlID.Cells1.Text
我认为这是不对的。我猜你是在找那个。使用它告诉GridView数据中的哪些列应该用作唯一标识符 您可能还想研究代码的其他一些优化: 在查询中使用参数,不要像那样连接SQL语句。 将与SqlConnection和SqlCommand对象一起使用,以便进行适当和轻松的处理。 使用try-catch并没有取得任何成果,事实上,您掩盖了异常堆栈。 更新: 请参阅以获取已删除行的ID。ID列是用于绑定GridView的查询的一部分吗 下面是一个更好的完整示例: .aspx:
<asp:GridView ID="GridView1" DataKeyNames="ID" AutoGenerateDeleteButton="true" runat="server">
</asp:GridView>
如果您正在运行SQL Server,那么在表上使用delete触发器可能会更容易
…删除和插入的是逻辑概念表。它们在结构上类似于定义触发器的表,即尝试执行用户操作的表,并保存可能由用户操作更改的行的旧值或新值 为什么不在删除之前先找到ID呢?嗨,希万。你能告诉我怎么做或者至少举个例子说明怎么做吗?我在标记上有这个:谢谢。这完全正确,Jakob,这就是我正在使用的:Dim StrID=GridView1.DataKeyse.RowIndex.ItemID.ToString,但我一直得到一个错误,RowIndex不是system.web.ui的成员。。。我需要在代码中更改什么?非常感谢您提供的提示。我仍然对如何获取GridViewDeledEventArgs.Keys属性感到非常困惑。我已经看过了链接。用户一次删除一行。那么,如何将ID datakey传递给带有WhERE的select语句呢[ID}='&strID&'你绝对是上帝派来的。谢谢你,雅各布。现在,我得到了已删除记录的ID,但由于某种原因,现在它不再将数据插入存档。它以前也这样做过。所以,我应该使用行\ u删除,而不是行\ u删除?还有,雅各布,当我运行调试器时,我得到了重复的条目。这听起来更像是我的错误与从GridView获取ID相比,您的SQL存在一个问题:
Public Class _Default
Inherits System.Web.UI.Page
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
If Not Page.IsPostBack Then
Dim x() = {New With {.id = 1, .name = "xxx"}, New With {.id = 2, .name = "zzz"}}
GridView1.DataSource = x
GridView1.DataBind()
End If
End Sub
Private Sub GridView1_RowDeleting(sender As Object, e As System.Web.UI.WebControls.GridViewDeleteEventArgs) Handles GridView1.RowDeleting
Dim id As Integer = CInt(e.Keys(0))
' Do your stuff!
' Don't forget to rebind the GridView, it will still have the deleted row in Viewstate.
End Sub
End Class