SQLite数据源路径奇怪的问题?

时间:2013-04-22 06:41:19

标签: c# sql database sqlite connection-string

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

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

"data source = MyData.sdb"

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

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

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

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

我觉得这很简单,需要你的经验来解释。奇怪的是可能在演示项目或我的新项目中,应该有一个异常工作。

请帮忙!谢谢!

2 个答案:

答案 0 :(得分:0)

@“Data source =”+ System.Windows.Forms.Application.StartupPath +“demo project \ MyData.sdb”;

这个代码 是运行应用程序的数据库

答案 1 :(得分:0)

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

例如,在C#Console应用程序中,工作目录可以是:

D:\Projects\SQLiteTest\bin\Debug

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

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

C:\windows\system32\inetsrv

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

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