user3383301
user3383301

Reputation: 1911

Improve querying speed on Sqlite

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

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;
}

Upvotes: 0

Views: 47

Answers (0)

Related Questions