Hi,
I want to delete rows from an MS-Access
database using an array of different IDs.
The Length
of this array might vary based on DataGrid.SelectedItems
.
The values of this array may also vary based on DataGrid.SelectedItems
.
I tried numerous different codes, but each one has its own problems.
Note: in the following solutions, BookCodeSelectedItems
is an array of uint
type.
First solution (This code works correctly when the array length is not large, but for example, if the array length is 30,000, it displays the error Query is too complex
):
OleDbCommand OleDbCommand_Delete = new OleDbCommand(string.Join(null, "Delete From BookTable Where BookCode In (",string.Join(",",BookCodeSelectedItems),")"), OleDbConnect);
Second solution (When the array length is large, this code runs very slowly):
for (int i = 0; i < BookCodeSelectedItems.Length; i++)
{
OleDbCommand OleDbCommand_Delete = new OleDbCommand(string.Join(null, "Delete From BookTable Where BookCode = @BookCodeSelectedItems"), OleDbConnect);
OleDbCommand_Delete.Parameters.AddWithValue("@BookCodeSelectedItems", BookCodeSelectedItems[i]);
OleDbCommand_Delete.ExecuteNonQuery();
}
Third solution (This code does not work properly if the user selects random rows):
OleDbCommand OleDbCommand_Delete = new OleDbCommand(string.Join(null, "Delete From BookTable Where BookCode Between @BookCodeSelectedItemsFirst And @BookCodeSelectedItemsLast"), OleDbConnect);
OleDbCommand_Delete.Parameters.AddWithValue("@BookCodeSelectedItemsFirst", BookCodeSelectedItems.First());
OleDbCommand_Delete.Parameters.AddWithValue("@BookCodeSelectedItemsLast", BookCodeSelectedItems.Last());
Thanks