2010-12-18 253 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文本文件”。

相关问题