Asp.net 使用GridView删除记录
我在删除记录时遇到了一些问题。我使用VB.net和Access数据库。当我尝试运行这个程序时,并没有出现错误,但数据库中的记录并没有被删除。有一个类要删除记录,该类将调用另一个方法,即call DeleteMultipleRecords。这是我的代码,希望有人能帮我解决这个问题 -Default.aspx.vb-Asp.net 使用GridView删除记录,asp.net,vb.net,Asp.net,Vb.net,我在删除记录时遇到了一些问题。我使用VB.net和Access数据库。当我尝试运行这个程序时,并没有出现错误,但数据库中的记录并没有被删除。有一个类要删除记录,该类将调用另一个方法,即call DeleteMultipleRecords。这是我的代码,希望有人能帮我解决这个问题 -Default.aspx.vb- Protected Sub btnDelete_Click(ByVal sender As Object, ByVal e As EventArgs) Handles btnDelet
Protected Sub btnDelete_Click(ByVal sender As Object, ByVal e As EventArgs) Handles btnDelete.Click
'create string collection to store IDs of records to be deleted
Dim idCollection As New StringCollection()
Dim strID As String = String.Empty
'Loop through GridView rows to find checked rows
For i As Integer = 0 To i < GridView1.Rows.Count - 1
Dim chkDelete As CheckBox = DirectCast(GridView1.Rows(i).Cells(0).FindControl("chkSelect"), CheckBox)
If chkDelete IsNot Nothing Then
If chkDelete.Checked Then
strID = GridView1.Rows(i).Cells(1).Text
idCollection.Add(strID)
End If
End If
Next
'called method to delete record
DeleteMultipleRecords(idCollection)
'rebind(GridView)
GridView1.DataBind()
End Sub
Private Sub DeleteMultipleRecords(ByVal idCollection As StringCollection)
'create connection
Dim cnnOLEDB As New OleDbConnection(strConnection)
Dim IDs As String = ""
'create string builder to store
'delete commands seperated by ;
For Each id As String In idCollection
IDs += id.ToString() & ","
Next
Try
Dim strIDs As String = IDs.Substring(0, IDs.LastIndexOf(""))
Dim strSql As String = ("Delete from Details WHERE ID = '" & strIDs & "' ")
cmdOLEDB.CommandType = CommandType.Text
cmdOLEDB.CommandText = strSql
cmdOLEDB.Connection = cnnOLEDB
cnnOLEDB.Open()
cmdOLEDB.ExecuteNonQuery()
cmdOLEDB.Dispose()
Catch ex As OleDbException
Dim errorMsg As String = "Error in Deletion"
errorMsg += ex.Message
Throw New Exception(errorMsg)
Finally
cnnOLEDB.Close()
End Try
End Sub
<asp:GridView ID="GridView1" runat="server" AllowPaging="True"
DataSourceID="SqlDataSource1" AutoGenerateColumns="False" DataKeyNames="ID">
<Columns>
<asp:TemplateField HeaderText="Select">
<ItemTemplate>
<asp:CheckBox ID="chkSelect" runat="server" />
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField DataField="ID" HeaderText="ID" SortExpression="ID"/>
<asp:TemplateField HeaderText="Name"
SortExpression="Name">
<ItemTemplate>
<asp:TextBox ID="txtName" runat="server"
Text='<%# Bind("Name") %>' ReadOnly="true"
BorderStyle="none"
BorderWidth="0px" >
</asp:TextBox>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Location"
SortExpression="Location">
<ItemTemplate>
<asp:TextBox ID="txtLocation" runat="server"
Text='<%# Bind("Location") %>'
ReadOnly="true"
BorderStyle="none" BorderWidth="0px">
</asp:TextBox>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
<asp:SqlDataSource ID="SqlDataSource1" runat="server"
ConnectionString="<%$ ConnectionStrings:LabSystemDBConnectionString %>"
ProviderName="<%$ ConnectionStrings:LabSystemDBConnectionString.ProviderName %>"
SelectCommand="SELECT * FROM [Details]"
DeleteCommand = "DELETE FROM [Details] WHERE ID = [@ID]">
<DeleteParameters>
<asp:Parameter Name="ID" />
</DeleteParameters></asp:SqlDataSource>
<asp:Button ID="btnDelete" runat="server" OnClick="btnDelete_Click" OnClientClick="return DeleteConfirmation();" Text="Delete" />
<br />
Protected Sub btnDelete\u Click(ByVal sender作为对象,ByVal e作为事件参数)处理btnDelete。单击
'创建字符串集合以存储要删除的记录的ID
Dim idCollection作为新的StringCollection()
Dim strID As String=String.Empty
'循环GridView行以查找选中的行
对于i As Integer=0到i
-Default.aspx-
Protected Sub btnDelete_Click(ByVal sender As Object, ByVal e As EventArgs) Handles btnDelete.Click
'create string collection to store IDs of records to be deleted
Dim idCollection As New StringCollection()
Dim strID As String = String.Empty
'Loop through GridView rows to find checked rows
For i As Integer = 0 To i < GridView1.Rows.Count - 1
Dim chkDelete As CheckBox = DirectCast(GridView1.Rows(i).Cells(0).FindControl("chkSelect"), CheckBox)
If chkDelete IsNot Nothing Then
If chkDelete.Checked Then
strID = GridView1.Rows(i).Cells(1).Text
idCollection.Add(strID)
End If
End If
Next
'called method to delete record
DeleteMultipleRecords(idCollection)
'rebind(GridView)
GridView1.DataBind()
End Sub
Private Sub DeleteMultipleRecords(ByVal idCollection As StringCollection)
'create connection
Dim cnnOLEDB As New OleDbConnection(strConnection)
Dim IDs As String = ""
'create string builder to store
'delete commands seperated by ;
For Each id As String In idCollection
IDs += id.ToString() & ","
Next
Try
Dim strIDs As String = IDs.Substring(0, IDs.LastIndexOf(""))
Dim strSql As String = ("Delete from Details WHERE ID = '" & strIDs & "' ")
cmdOLEDB.CommandType = CommandType.Text
cmdOLEDB.CommandText = strSql
cmdOLEDB.Connection = cnnOLEDB
cnnOLEDB.Open()
cmdOLEDB.ExecuteNonQuery()
cmdOLEDB.Dispose()
Catch ex As OleDbException
Dim errorMsg As String = "Error in Deletion"
errorMsg += ex.Message
Throw New Exception(errorMsg)
Finally
cnnOLEDB.Close()
End Try
End Sub
<asp:GridView ID="GridView1" runat="server" AllowPaging="True"
DataSourceID="SqlDataSource1" AutoGenerateColumns="False" DataKeyNames="ID">
<Columns>
<asp:TemplateField HeaderText="Select">
<ItemTemplate>
<asp:CheckBox ID="chkSelect" runat="server" />
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField DataField="ID" HeaderText="ID" SortExpression="ID"/>
<asp:TemplateField HeaderText="Name"
SortExpression="Name">
<ItemTemplate>
<asp:TextBox ID="txtName" runat="server"
Text='<%# Bind("Name") %>' ReadOnly="true"
BorderStyle="none"
BorderWidth="0px" >
</asp:TextBox>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Location"
SortExpression="Location">
<ItemTemplate>
<asp:TextBox ID="txtLocation" runat="server"
Text='<%# Bind("Location") %>'
ReadOnly="true"
BorderStyle="none" BorderWidth="0px">
</asp:TextBox>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
<asp:SqlDataSource ID="SqlDataSource1" runat="server"
ConnectionString="<%$ ConnectionStrings:LabSystemDBConnectionString %>"
ProviderName="<%$ ConnectionStrings:LabSystemDBConnectionString.ProviderName %>"
SelectCommand="SELECT * FROM [Details]"
DeleteCommand = "DELETE FROM [Details] WHERE ID = [@ID]">
<DeleteParameters>
<asp:Parameter Name="ID" />
</DeleteParameters></asp:SqlDataSource>
<asp:Button ID="btnDelete" runat="server" OnClick="btnDelete_Click" OnClientClick="return DeleteConfirmation();" Text="Delete" />
<br />
您应该更改这些行才能工作:
For Each id As String In idCollection
IDs += "'" + id.ToString() & "',"
Next
Try
Dim strIDs As String = IDs.Substring(0, IDs.LastIndexOf(""))
Dim strSql As String = ("Delete from Details WHERE ID IN (" & strIDs & ")")
但是:此代码容易出错,您必须在2012年使用SQL参数。请在
Dim strSql As String = ("Delete from Details WHERE ID IN (" & strIDs & ")")
然后运行您的应用程序,并将watch添加到strSql,当遇到断点时,按F11,然后您可以看到strSql的内容,复制sql语句并在Access数据库中运行查询,并查看它是否工作
PS:尝试将[]添加到表名,从[详细信息]中删除。我已经更改了,但仍然相同,没有错误,但没有删除记录