Search code examples
c#.netsqlsql-server-ce

C# Select item from list and then get item from SQL Server CE database


I am working on something that requires a selection to be made from a list view and then selects the item from a SQL Server database based on column 1 (or ii) and then rewrites it to a local datatable to be processed into a text file. Here's what I have so far:

var con = new SqlCeConnection(ConfigurationManager.ConnectionStrings[Connection.ConnectionStrings.CurrentConnection].ConnectionString);

foreach (ListViewItem item in LSTAsset.SelectedItems)
{
    for (int ii = 0; ii < LSTAsset.SelectedItems.Count; ii++)
    {

        string select = LSTAsset.SelectedItems[ii].Text;

        if (con != null && con.State == ConnectionState.Closed)
        {
            con.Open();
        }
        var cmd = new SqlCeCommand("Select assetname, serial from asset where        assetname like '%" + select + "%'", con);
        SqlCeDataAdapter dataadapt = new SqlCeDataAdapter(cmd);
        //DataTable datatable = new DataTable();

        if (ii == 0)
        {
            dataadapt.Fill(steve.iTable);
        }

        if (ii < 0)
        {
            dataadapt.Update(steve.iTable);
        }
    }
}

Now my issue being, it seems to double the selected items when more than one item is selected. Say you selected 2 items, it now runs though the code 4 times and gives you 4 rows in the datatable. Why is it doubling the code? It ruins the output file later as it writes 2x the needed rows in the table.


Solution

  • It looks like you are looping unnecessary twice (SelectedItems.Count).

    Try removing the inner or outer loop, for example:

    foreach (ListViewItem item in LSTAsset.SelectedItems)
    

    The reason why is because the next statement is doing the same thing via a for loop rather than a foreach and you will connect to the database n times * 2, where n is the selected item count.