我正在尋找任何有關如何使用.NET Web應用程序創建與數據庫的接口以從Excel文件上載數據的最佳實踐或想法 我是否應該使用允許所有要加載的記錄並標記錯誤,或者我應該使用一種在發生錯誤時停止加載的機制。將文件上傳到數據庫的最佳實踐
我從來沒有必須處理這種類型的需求,所以任何幫助將超級!
謝謝
我正在尋找任何有關如何使用.NET Web應用程序創建與數據庫的接口以從Excel文件上載數據的最佳實踐或想法 我是否應該使用允許所有要加載的記錄並標記錯誤,或者我應該使用一種在發生錯誤時停止加載的機制。將文件上傳到數據庫的最佳實踐
我從來沒有必須處理這種類型的需求,所以任何幫助將超級!
謝謝
如果你的數據庫數據的完整性是非常重要的,不允許的數據要導入有誤或不符合你的數據庫的驗證要求。
由於這些是Excel文件,用戶應該很容易地更正Excel文件中的數據,而不是嘗試使用其他接口來修復數據。只要確保錯誤消息指導用戶到什麼領域是問題,並清楚地解釋什麼是錯的。
你想把excel文件放在數據庫中作爲blob嗎?或者你想解析這些文件並將這些文件中的記錄放入數據庫中?
我假設它是後者。
作爲用戶我想要知道錯誤是什麼,所以我可以修復它們並重試。我想我如何再次嘗試取決於我上傳的數據量。
我想嘗試做一個混合解決方案..如果只有一些錯誤顯示一個屏幕來糾正這些錯誤,以便用戶可以快速移動。如果出現大量錯誤,您應該可以做到,並讓用戶再次嘗試。
就DB而言。要麼有一個單獨的表格上傳,直到它們被檢查並獲取「真實」數據,或者有一個UploadUniqueId列,以便您可以毫不費力地回滾任何上傳。
刪除的表名,其中UploadUniqueId =「GUID」
您應該上傳數據,然後在驗證檢查失敗時將其標記。對於實際加載的數據,你有幾種選擇:
。
public void Load() {
bool OK = File.Exists(_filename);
if (OK) {
string sql = String.Format("Select * from {0}", FileName);
OleDbConnection csv = new OleDbConnection();
OleDbCommand cmd = new OleDbCommand(sql, csv);
OleDbDataReader rs = null;
SqlConnection db = null;
SqlCommand clear = null;
SqlBulkCopy bulk_load = null;
try {
// Note two connections: one from the csv file
// and one to the database;
csv = new OleDbConnection();
csv.ConnectionString = ConnectionString;
csv.Open();
cmd = new OleDbCommand(sql, csv);
rs = cmd.ExecuteReader();
// Dung out the staging table
db = // [Create A DB conneciton Here]
clear = new SqlCommand("Truncate table Staging", db); // Left to the reader
clear.ExecuteNonQuery();
// Import into the staging table
bulk_load = new SqlBulkCopy(db);
bulk_load.DestinationTableName = Destination; // Actually an instance var
bulk_load.WriteToServer(rs);
} catch (Exception ee) {
string summary = ee.Message;
string detail = ee.StackTrace;
//Notify(DisplayType.error, summary, detail);
} finally {
if (rs != null) rs.Close();
if (csv != null) csv.Close();
if (bulk_load != null) bulk_load.Close();
}
}
}
我會嘗試下面的方法,它在過去運行良好。
儘管驗證是好的,但請確保您儘可能以原始格式存儲。你最終在一千個你不會期望的地方進行千次轉換,並且將原始版本儘可能未轉換爲一個狀態是一個巨大的勝利。 – aronchick 2009-09-08 16:33:32