繁体   English   中英

“无法打开数据库文件”。 开发C#控制台应用程序时是否必须放置sqlite数据库的完整物理位置

[英]“Unable to open the database file”. Do I have to put the full physical location of sqlite database when developing C# Console application

我创建了一个Sqlite数据库mydatabase.sqlite ,并将其放在控制台应用程序项目内的App_Data文件夹中。 我收到一个错误:

无法打开数据库文件

使用sqlite和C#开发控制台应用程序时。

当我使用

string cs = @"Data Source=App_Data\mydatabase.sqlite;Version=3";

我正进入(状态

无法打开数据库文件错误;

但是当我使用

string cs = @"Data Source=C:\Users\UP_SW02\Desktop\ConsoleApplication1\ConsoleApplication1\App_Data\mydatabase.sqlite;Version=3";

该应用程序正常运行。

是否有可能使用Sqlite数据源而不使用完整的物理位置?

谢谢..

程序内部使用的所有非根目录路径都相对于启动应用程序的文件夹。 请注意, 这不一定是应用程序本身所在的文件夹。使用此类路径时必须非常小心。

您似乎想要的是相对于您自己的应用程序的文件夹。 有一个简单的方法可以做到这一点。 如果您的项目中包含Windows.Forms命名空间,则可以从System.Windows.Forms.Application.ExecutablePath获取可执行文件的路径:

// Get app folder
String appFolder = Path.GetDirectoryName(Application.ExecutablePath)
// Combine with sqlite db path
String dbPath = Path.Combine(appFolder, @"App_Data\mydatabase.sqlite");
// Build connection string
string cs = String.Format(@"Data Source={0};Version={1}", dbPath, 3);

如果您未使用Windows窗体程序,则Application.ExecutablePath的替代方法是System.Reflection命名空间中的Assembly.GetExecutingAssembly().Location

在连接字符串中获取文件夹相对路径的最简单方法是简单地添加| DataDirectory |。

之前

string cs = @"Data Source=App_Data\mydatabase.sqlite;Version=3";

string cs = @"DataSource=|DataDirectory|\App_Data\mydatabase.sqlite;Version=3";

不可能,SQlite不需要完整路径地址,但是您可以通过两种解决方案来解决:

1-将连接路径保存在配置文件中。

2-通过GetFolderPath方法获取App_Data文件夹路径,例如:

Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);

因此,您的代码如下所示:

var fileName = Path.Combine(Environment.GetFolderPath(
Environment.SpecialFolder.ApplicationData), "mydatabase.sqlite");
string sqliteConnection = string.Format("Data Source={0};Version=3;Timeout=2;", fileName);

3-或者简单的方法是:

string sqlitePath = Directory.GetCurrentDirectory() + "/App_Data/mydatabase.sqlite";

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM