與SQL CE這一個C#WPF應用程序作爲數據源:從數據表批量插入到數據源SQLCE
我有一個數據表(顯示爲數據網格)和一個SQL CE的數據源。 我使用DataAdapter,DataSet和DataTable從SQL CE填充我的DataTable。然後將我的DataGrid綁定到DataTable。
我可以將行(> 10,000)行添加到我的DataTable中,並可能在將所有更改全部傳播到我的Sql CE數據源之前編輯了數據。
我目前的做法是DROP TABLE,CREATE TABLE,並通過蠻力重新插入行到SQLCE。 SQL CE沒有批量插入,我不想使用第三個庫或DLL。性能很慢...
我正在尋找或更快的方式來「批量插入」,而無需刪除,創建和逐行插入行。
我讀了一些關於SqlCeResultSet的內容,但我找不到任何文檔,並想知道它與我正在嘗試做什麼有關。
[編輯]
繼答案,並在此覈對:
http://ruudvanderlinden.com/2010/10/13/bulk-insert-into-sql-ce-in-c/
我想使用的功能,但它似乎沒有工作。 以下是我的代碼。 Footable是我的數據庫表,我有兩列 - 「id」和「FooName」。
Hashtable idHash = new Hashtable();
Hashtable fooNameHash = new Hashtable();
foreach(DataRow row in dt.Rows)
{
idHash.Add("id",row["id"]);
fooNameHash.Add("FooName",row["FooName"]);
}
List<Hashtable> colHashList = new List<Hashtable>();
colHashList.Add(idHash);
colHashList.Add(fooNameHash);
BulkInsertDatabase(colHashList, "FooTable");
它沒有工作,但我看不出有什麼問題,我上面的代碼,所以希望有人可以點出來..
[編輯 - 2] [答案]
最後我得到的代碼工作(儘管懷疑與性能):
List<Hashtable> colHashList = new List<Hashtable>();
Hashtable[] idHash = new Hashtable[dt.Rows.Count];
Hashtable[] fooNameHash = new Hashtable[dt.Rows.Count];
int i=0;
foreach(DataRow row in dt.Rows)
{
idHash[i] = new Hashtable();
idHash[i].Add("id", row["id"]);
colHashList.Add(idHash[i]);
fooNameHash[i] = new Hashtable();
fooNameHash[i].Add("FooName", row["FooName"]);
colHashList.Add(fooNameHash[i]);
i++;
}
BulkInsertDatabase(colHashList, "FooTable");
您的> 10K記錄是否包含更新記錄和新記錄?或者只是一個新增的記錄? – 2011-05-11 08:50:22
@Peyton Crow - 記錄包含更新記錄和新記錄。但是在插入之前,我會在SQL CE中刪除,創建和清空表。因此,我會將所有DataTable記錄視爲新添加的。 – KMC 2011-05-11 10:17:40