Reputation: 1911
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