C#和SQLite:使用相对路径时“没有这样的表错误”?

时间:2011-12-12 23:29:13

标签: c# sqlite system.data.sqlite

我在连接到我的sqlite数据库时遇到问题。该文件位于应用程序的文件夹中。这是连接字符串

string path = "Data Source=MY.db";

如果我使用绝对路径,我可以让它工作,但如果我尝试使用相对路径,它会给我一个“找不到表”错误。有什么想法吗?

4 个答案:

答案 0 :(得分:10)

您正在开放一个不同的 - 也许是一个 - 没有所述表的数据库。 (是的,SQLite将很乐意使用默认连接设置创建一个新数据库。)

确保打开正确的数据库。请记住,相对路径是相对于Current Working Directory的,这可能不是预期的。

(工作目录受到加载进程的位置和方式的影响。例如,可以在Project Settings / Debug / Start Options下设置“Debug”会话的工作目录。)

快乐的编码。

另见:

答案 1 :(得分:0)

当您使用GUI Manager for SQLite时,您还没有保存数据库及其表格时发生这种情况。 两个解决方案 1)在GUI Manager中使用CTR + S保存数据库及其表 2)或者只需关闭SQlite的GUI管理器并保存所有内容。

重要!我正在使用GUI manger for SQLITE(DB Browser for SQLITE)以及它的全部内容。

答案 2 :(得分:0)

我的Windows应用程序(C#)和Web应用程序(ASP.net)都遇到了相同的问题。我通常使用SQLite,因为我发现它更容易,尤其是在使用连接字符串时。但是对我来说,主要的障碍是在代码中放置一个相对路径,因此我可以发布它而不必担心找不到数据库。我已经尝试了许多方法(使用“ |数据目录|”,“〜/”,“ ./”,...),但是在找到这些解决方案之前,这些方法均无效。看来代码对我有用,但想知道我是否在正确使用它们?!

Web应用程序:

    SQLiteConnection sql_con = new SQLiteConnection("Data Source =" + Server.MapPath("~/") + "mydb.db; Version = 3; New = false;);

Windows应用程序:

    SQLiteConnection sql_con = new SQLiteConnection("Data Source =" + System.IO.Path.GetDirectoryName(Application.ExecutablePath) + "mydb.db; Version = 3; New = false; Read Only = true");

答案 3 :(得分:0)

只需将您的 .database 文件替换为项目文件夹中的 \bin\Debug,因为在您的情况下,编译器会创建同名的 DB 文件,但其完全为空 0bytes