3

SQLiteConnection 字符串最基本的形式是“data source = ...”

我尝试了一个演示,其中有一个名为 MyData.sdb 的 SQLite 数据库文件,该文件位于我的演示项目文件夹树中(例如:DemoProject\MyData.sdb)。以下 SQLiteConnection 字符串有效:

"data source = MyData.sdb"

我可以选择表确定。我什至尝试将 MyData.sdb 添加到我的演示项目文件夹中的另一个子文件夹(例如,DemoProject\Data\MyData.sdb)并且上面的连接字符串仍然有效?哇,不敢相信。但现在最奇怪的是(与我在演示项目中所经历的相反):

当我尝试另一个项目并将其应用于它时,当我尝试选择一个确实存在于我的 SQLite 数据库中的表时,它抛出了一个名为“没有这样的表...”的异常。太奇怪了。我怀疑这是因为数据库文件的路径不正确。我试过使用数据库文件的绝对路径,如下所示:

"data source = D:\\demo project\\MyData.sdb"

然后它起作用了,为什么我在演示项目中很好地为我的SQLite数据库文件使用了相对路径,但不能在我的新项目中应用?

我认为这并不容易,它需要你的经验来解释。奇怪的事情可能在演示项目或我的新项目中,应该有一个工作异常。

请帮忙!谢谢!

4

2 回答 2

1

由于您的应用程序的当前工作目录可能是什么,您的数据库文件的相对路径可能在项目之间不起作用。您可以通过在应用程序运行时获取来了解应用程序的工作目录Environment.CurrentDirectory

例如,在 C# 控制台应用程序中,工作目录可能是:

D:\Projects\SQLiteTest\bin\Debug

如果您的数据源恰好是"data source = MyData.sdb",那么您的控制台应用程序将在D:\Projects\SQLiteTest\bin\Debug\MyData.sdb.

如果您的下一个应用程序是在 IIS 中运行的 asp.net 应用程序,则工作目录可能是:

C:\windows\system32\inetsrv

您的应用程序将无法找到您的数据库位置,因为您很可能将数据库放在项目文件夹中,而不是 at C:\windows\system32\inetsrv\MyData.sdb

这个 SO question包含一些解决方案,以始终如一地解析数据库的相对路径。

于 2017-07-29T00:01:58.730 回答
0

@"数据源=" + System.Windows.Forms.Application.StartupPath + "演示项目\MyData.sdb";

带有此代码的 this 是运行应用程序的数据库

于 2013-07-28T13:59:47.677 回答