2010-12-18 91 views
1

我試圖爲我的數據庫應用程序實現導出功能。我正在使用C#併爲我正在使用的C#提供SQlite包裝器。請原諒我對數據庫概念/常見用法的無知,這是我的第一個數據庫應用程序。使用C#導出SQLite數據庫,最佳做法

導出: 很容易,SQLite數據庫存儲在單個s3db文件中。所以,要導出,我只需要使用System.IO.File.Copy複製該文件?這是做這件事的最好方法嗎?最後,通過導出,我需要在複製文件之前關閉所有數據庫連接嗎?同樣,對這種情況的最佳實踐將會是一個很大的幫助......在這種情況下,我不確定一些事情。例如...

如果數據庫很大,副本需要一段時間會怎麼樣?用戶可以開始導出,然後立即去嘗試將某些東西插入到數據庫中,這顯然是一個問題。我應該在複製時鎖定程序嗎?

一如既往,感謝您的任何幫助。

+0

現在我知道複製文件是正確的方法,我該如何創建一個模態窗口窗體來顯示進度條? – CODe 2010-12-18 05:07:03

+1

這是另一個問題... – 2010-12-18 05:44:25

回答

1

我爲SQL Server CE做了類似的功能,它與概念上的sqlite非常相似。處理它的最安全的方式是你如何建議:關閉所有的數據庫連接,並防止用戶再次打開(我通過顯示備份進度的整個應用程序上的模式窗口處理此問題)。再一次,我沒有用sqlite本身做,但使用SQL Server CE,它是一個簡單的文件副本。

要爲WinForms應用程序的整個應用程序創建窗口模式,只需使用MessageBox.Show(),並且不指定所有者。

+0

MessageBox.Show()在哪裏?我剛剛創建了一個Windows窗體來顯示進度,並計劃使其不可移動和不可關閉。我是否在我的ProgressForm表單代碼中調用它?感謝您的貢獻! – CODe 2010-12-18 05:01:50

+0

對不起,我沒有想直。爲了向整個應用程序顯示錶單模式,創建該表單的一個實例,而不是調用Show(),調用ShowDialog(),但是同樣的規則適用於不傳入所有者以使其模式化爲整體應用。可能會使對話框不可移動,但如果完成了這一操作,則會使用戶感到刺激。您可以通過取走控制箱並取消表單觸發的任何關閉事件來使其不可關閉。儘管沒有什麼會阻止用戶強行關閉整個應用程序。 – 2010-12-18 05:38:34

0

複製文件的好處在於,重新創建數據庫和插入記錄的替代方法肯定會花費更多的時間。如果您的應用程序允許更改源代碼或導出代碼,那麼您肯定應該鎖定該操作。

0

複製是最簡單的方法,但我不確定這是最好的方法。除了必須確保在複製過程中鎖定文件之外,您可能希望將數據轉儲爲可移植的格式,而不僅僅是您正在使用的特定SQLite版本的二進制表示。

將所有數據轉儲到文件中與複製一樣簡單。

例如,參見this page中的「將整個數據庫轉換爲ASCII文本文件」。

相關問題