ASP. NET CORE Web App выдает исключение SQLiteException: невозможно открыть файл базы данных - PullRequest
0 голосов
/ 06 апреля 2020

У меня есть база данных SQLite, и я загрузил ее на свой сервер [на хосте в Azure]. Но когда я пытаюсь получить к нему доступ, он выдает SQLiteException: unable to open database file.

Моя строка подключения выглядит примерно так -

string connectionString = "Data Source=https:\\mywebsite.azurewebsites.net\\DB\\persondb.db; Version=3"

Я тоже это пробовал -

string connectionString = "Data Source=~/DB/persondb.db; Version=3";

Вот полный код моего метода -

        public static List<PersonDetails> GetPersons()
        {
            // string connectionString = "Data Source=https:\\mywebsite.com\\DB\\persondb.db; Version=3";
            string connectionString = "Data Source=~/DB/persondb.db; Version=3";

            using (IDbConnection cnn = new SQLiteConnection(connectionString))
            {
                var output = cnn.Query<PersonDetails>
                    ("SELECT * FROM persons",
                    new DynamicParameters());
                return output.ToList();
            }
        }

Как мне решить эту проблему?

Ответы [ 2 ]

1 голос
/ 06 апреля 2020

См. О SQLite

SQLite является встроенным ядром базы данных SQL. В отличие от большинства других SQL баз данных, SQLite не имеет отдельного серверного процесса. SQLite читает и записывает напрямую в обычные файлы на диске.

Вы можете использовать следующий код в своем ASP. NET веб-проекте:

    string path = Server.MapPath("~/DB");
    string connectionString = $"Data Source={path}/demo.db; Version=3";

    using (var con = new SQLiteConnection(connectionString))
    {
        con.Open();
        var cmd = new SQLiteCommand("SELECT SQLITE_VERSION()", con);
        return cmd.ExecuteScalar().ToString();
    }

Код Server.MapPath("~/DB") найдет физический путь к папке DB в вашем проекте, а затем строка подключения должна быть в рабочем состоянии.

0 голосов
/ 06 апреля 2020

Ответ Джека Цзя проясняет сценарий. Но поскольку Server.MapPath не работает в ASP. NET Core, мы можем получить путь к серверу root через интерфейс IWebHostEnvironment.

Эту проблему можно решить следующим образом -

  1. Создайте строку, к которой можно получить глобальный доступ [например, internal static string rootpath;]
  2. В файле startup.cs, присвойте rootpath в методе public void Configure(IApplicationBuilder app, IWebHostEnvironment env) [например Program.rootpath = env.WebRootPath;]
  3. Теперь допустимая строка подключения должна выглядеть следующим образом - string connectionString = $"Data Source={Program.rootpath}/DB/demo.db; Version=3";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...