无法访问WPF应用程序命名空间的文件结构中存储的SQLite数据库(Visual Studio)

vfwfrxfs  于 2023-05-29  发布在  SQLite
关注(0)|答案(1)|浏览(190)

我正在使用Visual Studio创建一个WPF应用程序,并希望在项目“资产”文件夹中存储一个数据库,以便使应用程序完全自包含。
我在外部创建了数据库(没有使用迁移或我见过的等效编码结构),并试图通过类似于我用来访问也存储在“资产”文件夹Assets\data\database.db中的图像的路径访问数据库,但当我尝试访问数据库时,程序会抛出一个错误,说它找不到。

数据库访问权限

namespace Project
{
    public class LoadDb
    {
        public LoadDb()
        {
            ReadDatabase();
        }

        void ReadDatabase()
        {

            using (SqliteConnection conn = new SqliteConnection(@"Data Source=..\Assets\data\database.db"))
            {
                conn.Open();

                SqliteCommand command = new SqliteCommand("Select * from Data", conn);
                SqliteDataReader reader = command.ExecuteReader();

                var dataList = new List<KeyValuePair<int, string>>();
                while (reader.Read())
                {
                    dataList.Add(new KeyValuePair<int, string>(reader.GetInt32(reader.GetOrdinal("dataId")), reader.GetString(reader.GetOrdinal("Name"))));
                }
                reader.Close();
                conn.Close();
            }
                

        }
    }
}

更改@"Data Source=C:\(full path)\Assets\data\database.db"确实有效,但是该路径取决于应用程序的位置,我不认为这是我想要的。
我对WPF和C#非常陌生,所以一直在学习各种教程和论坛,但我找不到任何类似于我想要的东西,我见过C:\ProgramData\中的存储,但(除非我想错了)这不会是一个独立的应用程序?
----编辑----
这是VisualStudio中项目命名空间内的文件结构的屏幕截图。

ryhaxcpt

ryhaxcpt1#

如果将Assets文件夹放在应用程序 *.exe文件附近,则以下代码将修复此问题。(已测试-它连接到数据库。)

void ReadDatabase()
{
    string appFolder = System.AppDomain.CurrentDomain.BaseDirectory;
    string dbFilePath = System.IO.Path.Combine(appFolder, "Assets\\data\\database.db");
    string connectionString = $"Data Source={dbFilePath}";
    using (SqliteConnection conn = new SqliteConnection(connectionString))
    {
        conn.Open();

        // Other stuff.
    }
}

相关问题