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