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

标签 c# sql database sqlite connection-string

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

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

"data source = MyData.sdb"

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

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

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

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

我觉得这并不容易,需要你的经验来解释。奇怪的可能是在demo项目或者我的新项目中,应该有一个运行不正常。

求助!谢谢!

最佳答案

数据库文件的相对路径可能在项目之间不起作用,因为您的应用程序的当前工作目录可能是什么。您可以在应用运行时通过获取 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包含一些解决方案,以一致地解析数据库的相对路径。

关于c# - SQLite 数据源路径奇怪的问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16140925/

相关文章:

database - 手动将数据库从一台 Neo4j 服务器复制到另一台 Neo4j 服务器,无需使用 Neo4j-shell 进行迁移

c# - 如何将 Migradoc PDF Sharp 中的表格移动到新页面

php - 集成测试数据库驱动的 php 的最佳实践是什么?

c# - 不支持 Last 和 LastOrDefault

mysql - 根据另一个表中记录的存在向 select 语句添加一列

sql - BigQuery - 查找 N 个最近的向量

MySQL 在创建表时为 id 分配主键不起作用

Java-从同一个 Statement 对象创建多个 ResultSets-它会有什么影响吗?

c# - 我应该如何处理 C# 中的不适当情况

c# - 支持和反对从 SQL Server 迁移到 MongoDB 的原因