2012-07-03 2 views
0

У меня есть проблема в записи удаления. Я использую VB.net с базой данных Access. Когда я пытаюсь запустить эту программу, ошибок нет, но запись не удалялась в базе данных. Есть один класс для удаления записи, и этот класс будет вызывать другой метод, который вызывает DeleteMultipleRecords. Вот мой код, надеюсь, кто-нибудь может помочь мне решить эту проблему.Удалить запись с использованием GridView

-Default.aspx.vb-

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 

-Default.aspx-

<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" /> 
    &nbsp;<br /> 

ответ

0

Вы должны изменить эти строки для работы:

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 & ")") 

НО: этот код подвержен SQL INJECTION, вы должны использовать SQL параметры в 2012 году

+0

Я уже изменить, но он по-прежнему так же, никакой ошибки, но это не не удалить запись – user692495

0

Пожалуйста, установите точку останова на

Dim strSql As String = ("Delete from Details WHERE ID IN (" & strIDs & ")") 

затем запустить приложение и добавить часы strSql, когда контрольная точка попала , нажмите F11, затем вы можете увидеть содержимое strSql, скопировать этот статус sql и запустить запрос в своей базе данных Access и посмотреть, работает ли он.

PS: попробуйте добавить [] к именам таблиц, DELETE FROM [Подробности]

+0

Thanks..I уже сделано, но это не работает – user692495

Смежные вопросы