Improve querying speed on Sqlite

57 Views Asked by At

I am using sqlite for my .NET Compact Framework 3.5 Application on windows mobile v6.I am facing slowness issue if I insert large data .

Consider this situation: I have around 150 items in my ArrayList (say List1). And I have a database table with two columns (say itemid and isFound).

I have to iterate each element in List1 and check in my database whether the itemid is available or not

  • If itemid is available in the table update the isFound status to 1 .
  • If the itemid is not available insert and update the isFound status.

For this it takes around 30 seconds what is the fastest way to do it ?

Here is my current code:

public ArrayList InsertNewlyScannedItems(ref ArrayList newlyScannedItemList)
{
    ArrayList newInsertedItemList = new ArrayList();
    SQLiteConnection conn = new SQLiteConnection("Data Source=" + db + ";Version=3;");
    SQLiteDataReader rs = null;

    try
    {
        conn.Open();
        SQLiteCommand availableTable = conn.CreateCommand();

        IEnumerator en = newlyScannedItemList.GetEnumerator();

        while (en.MoveNext())
        {
            ItemInfo itmInfo = (ItemInfo)en.Current;                  
            string cmdText = "";
            cmdText = "Select id, isFound item where id = '" + itmInfo.id + "'";
            availableTable.CommandText = cmdText;
            rs = availableTable.ExecuteReader();

            if (rs.Read())
            {
                if (!itmInfo.id.Equals(""))
                {
                    availableTable.Dispose();
                    availableTable.CommandText = "UPDATE item SET isFound = @isFound Where id = @id";
                    availableTable.Parameters.AddWithValue("@isFound", itmInfo.isFound);
                    availableTable.Parameters.AddWithValue("@id", itmInfo.id);
                    availableTable.ExecuteNonQuery();                           
                }
            }
            else
            {
                availableTable.Dispose();
                cmdText = "INSERT INTO item(id, isFound)";
                cmdText += "VALUES ( '" + itmInfo.id  + "','"  + itmInfo.isFound + ")";
                availableTable.CommandText = cmdText;
                availableTable.ExecuteNonQuery();
            }
            newInsertedItemList.Add(itmInfo);
        }
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message);
    }
    finally
    {
        if (rs != null)
        {
            //rs.Close();
            //rs.Dispose();
        }
        if (conn != null && conn.State == ConnectionState.Open)
        {
            conn.Close();
            conn = null;
        }
    }
    return newInsertedItemList;
}
0

There are 0 best solutions below