SQLite 数据源路径奇怪的问题?
Posted
技术标签:
【中文标题】SQLite 数据源路径奇怪的问题?【英文标题】:SQLite data source path strange issue? 【发布时间】:2013-04-14 23:45:25 【问题描述】: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数据库文件使用了相对路径,但在我的新项目中却不能应用?
我认为这并不容易,需要你的经验来解释。奇怪的可能在demo项目中,也可能在我的新项目中,应该有一个工作异常。
请帮忙!谢谢!
【问题讨论】:
我的建议是:不要依赖“未记录的功能”。始终做正确的事情并按照文档中的说明指定参数。您认为“有用”的对您有用的功能可能会被开发人员视为错误,并且可以在下一个版本中修复 【参考方案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
您的应用将无法找到您的数据库位置,因为您很可能将数据库放在项目文件夹中,而不是 C:\windows\system32\inetsrv\MyData.sdb
。
This SO question 包含一些解决方案,可以始终如一地解析数据库的相对路径。
【讨论】:
【参考方案2】:@"数据源=" + System.Windows.Forms.Application.StartupPath + "演示项目\MyData.sdb";
此代码 是应用程序运行所在的数据库
【讨论】:
以上是关于SQLite 数据源路径奇怪的问题?的主要内容,如果未能解决你的问题,请参考以下文章
在 AsyncTask 上尝试使用 SQLite 检索数据的奇怪行为
奇怪的 org.sqlite.SQLiteException: [SQLITE_ERROR] SQL 错误或缺少数据库(外键不匹配 -