简体   繁体   中英

How can I create a database file with SQLite-net?

I am using SQLite.net nuget package in my UWP application. I want to create a local database file to use as such:

var s = new SQLiteConnection("myDbSQLite.db3", SQLiteOpenFlags.Create);

But it throws the error:

Could not open database file: C:\Path\MyProject\bin\x86\Debug\AppX\myDbSQLite.db3 (Misuse)

I see in other posts they suggest to use SQLiteConnection.CreateFile("MyDatabase.sqlite"); but I don't see that method?

EDIT

The code

FileStream fs = File.Create(path);

Throws the exception:

UnauthorizedAccessException access to the path is denied

So I think this is a permission issue I am having with UWP. Is there something in the capabilities that I need to set?

Check your permissions on the folder, and also try using this for the constructor

_database = new SQLiteAsyncConnection(
     "myDbSQLite.db3", 
     SQLiteOpenFlags.Create | 
     SQLiteOpenFlags.FullMutex | 
     SQLiteOpenFlags.ReadWrite );

You should use a folder wher you have write-access to. So please try the following code:

String path = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
string dbFile = Path.Combine( path, "myDbSQLite.db3");
var s = new SQLiteConnection( dbFile, SQLiteOpenFlags.Create);

Because creating a file in UWP must be done with the UWP API, if you're going to use this nuget library, you have to accommodate by creating it yourself first:

// Create the empty file; replace if exists.
Windows.Storage.StorageFolder storageFolder = Windows.Storage.ApplicationData.Current.LocalFolder;
storageFolder.CreateFileAsync("myDbSQLite.db3", Windows.Storage.CreationCollisionOption.ReplaceExisting);

My UWP app is actually part of a Xamarin.Forms app that is using shared code, so if your app is solely UWP there's probably a better library, such as this one that Codexer referred.

This worked for me:

 var databasePath = Path.Combine(GetLocalFileDirectory(), "MyData.db");

        try
        {
            // Create the empty file; replace if exists.
            db = new SQLiteAsyncConnection(databasePath,
                                         SQLiteOpenFlags.Create |
                                         SQLiteOpenFlags.FullMutex |
                                         SQLiteOpenFlags.ReadWrite);
        }
        catch(Exception ex) 
        {
            throw new Exception(ex.Message);
        }


public string GetLocalFileDirectory()
{
    var docFolder = FileSystem.AppDataDirectory
    var libFolder = Path.Combine(docFolder, "Databases");

    if (!Directory.Exists(libFolder))
    {
        Directory.CreateDirectory(libFolder);
    }
    return libFolder;
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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