[英]“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.