Microsoft.Data.Sqlite.SqliteException: «Ошибка SQLite 14:« невозможно открыть файл базы данных ». ' - PullRequest
1 голос
/ 23 марта 2020

Я получаю эту ошибку Microsoft.Data.Sqlite.SqliteException: 'Ошибка SQLite 14:' невозможно открыть файл базы данных '.' когда я пытаюсь запустить этот код, это приложение UWP, и я использую sqlite

private void btnContinue_Click(object sender, RoutedEventArgs e)
        {
            string datasource = @"F:\Curtis\Documents\Capstone\Capstone\Database\BobDB.db"; ;


            using (SqliteConnection conn = new SqliteConnection(@"Data Source = " + datasource))
            {
                conn.Open();
                SqliteCommand command = conn.CreateCommand();
                command.CommandText = "Select TestTableTXT from TestTable;";
                using (SqliteDataReader reader = command.ExecuteReader())
                {
                    while (reader.Read())
                    {
                        DatabaseTextBlock.Text = reader.GetString(0);
                    }
                }



                    conn.Close();
            }
        }

1 Ответ

2 голосов
/ 24 марта 2020

Приложения UWP работают в песочнице, и когда вы запускаете их, они устанавливаются в нее. Они не работают в вашей папке bin исходного кода вашего проекта. Для того, чтобы ваш код был запущен и запущен, добавьте файл db в папку Assets вашего проекта Assets\BobDB.db. Установите Build Action этого файла на Content. Хорошо, что наш файл теперь включен в папку «Установленные приложения». Плохо то, что он только для чтения . Чтобы преодолеть это, нам нужно скопировать его в локальную папку приложения:

public MainPage()
{
    this.InitializeComponent();
    Loaded += MainPage_Loaded;
}

private async void MainPage_Loaded(object sender, RoutedEventArgs e)
{
    string targetDbPath = Path.Combine(Windows.Storage.ApplicationData.Current.LocalFolder.Path, "Database\\BobDB.db");
    if (!File.Exists(targetDbPath)) 
    {
        var installedLocation = Windows.ApplicationModel.Package.Current.InstalledLocation;
        using (var input = await installedLocation.OpenStreamForReadAsync("Assets\\BobDB.db")) 
        {
            using (var output = await Windows.Storage.ApplicationData.Current.LocalFolder.OpenStreamForWriteAsync("Database\\BobDB.db", Windows.Storage.CreationCollisionOption.FailIfExists))
            {
                await input.CopyToAsync(output);
            }
        }                
    }       


    using (SqliteConnection conn = new SqliteConnection(@"Data Source = " + targetDbPath))
    {
        conn.Open();
...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...