みんな、今私は問題を抱えています、それは本当に不思議に思います。
私は現在、Windows 8 RTアプリ、アプリストアデータをローカルに開発しているので、WinRTにSQLiteを使用することを選択しました(SQLite.cs SQLiteAsync.cs、SQLite3.dllを含む)、WinRT用SQLiteはデータベースファイルを保存しますデフォルトでアプリケーションの一時フォルダに
public SQLiteConnection (string databasePath, bool storeDateTimeAsTicks = false): this (databasePath, SQLiteOpenFlags.ReadWrite | SQLiteOpenFlags.Create, storeDateTimeAsTicks)
{
}
/// <summary>
/// Constructs a new SQLiteConnection and opens a SQLite database specified by databasePath.
/// </summary>
/// <param name="databasePath">
/// Specifies the path to the database file.
/// </param>
/// <param name="storeDateTimeAsTicks">
/// Specifies whether to store DateTime properties as ticks (true) or strings (false). You
/// absolutely do want to store them as Ticks in all new projects. The default of false is
/// only here for backwards compatibility. There is a *significant* speed advantage, with no
/// down sides, when setting storeDateTimeAsTicks = true.
/// </param>
public SQLiteConnection (string databasePath, SQLiteOpenFlags openFlags, bool storeDateTimeAsTicks = false)
{
DatabasePath = databasePath;
#if NETFX_CORE
SQLite3.SetDirectory(/*temp directory type*/2, Windows.Storage.ApplicationData.Current.TemporaryFolder.Path);
#endif
Sqlite3DatabaseHandle handle;
#if SILVERLIGHT || USE_CSHARP_SQLITE
var r = SQLite3.Open (databasePath, out handle, (int)openFlags, IntPtr.Zero);
#else
// open using the byte[]
// in the case where the path may include Unicode
// force open to using UTF-8 using sqlite3_open_v2
var databasePathAsBytes = GetNullTerminatedUtf8 (DatabasePath);
var r = SQLite3.Open (databasePathAsBytes, out handle, (int) openFlags, IntPtr.Zero);
#endif
Handle = handle;
if (r != SQLite3.Result.OK) {
throw SQLiteException.New (r, String.Format ("Could not open database file: {0} ({1})", DatabasePath, r));
}
_open = true;
StoreDateTimeAsTicks = storeDateTimeAsTicks;
BusyTimeout = TimeSpan.FromSeconds (0.1);
}
アプリの一時フォルダー パスに割り当てます。
ユーザーデータと動作を保存するために、データベースファイルをドキュメントフォルダーなどの別のフォルダーに保存し、ユーザーがアプリを再インストールするときにデータをインポートします。だから私は次のように保存フォルダ、コードを変更します
StorageFolder sourceFolder = await KnownFolders.DocumentsLibrary.GetFolderAsync(FolderName);
DatabasePath = Path.Combine(sourceFolder.Path, DBName);
SQLite3.SetDirectory(/*temp directory type*/2, storeFloderPath);
しかし、それは次の場所で例外をスローします:
var r = SQLite3.Open(databasePathAsBytes, out handle, (int)openFlags, IntPtr.Zero);
Handle = handle;
if (r != SQLite3.Result.OK)
{
throw SQLiteException.New(r, String.Format("Could not open database file: {0} ({1})", DatabasePath, r));
}
ファイルを開けませんと表示されます。おそらく問題は「SQLite3.SetDirectory(/ temp directory type /2, storeFloderPath)」だと思います.「2」はスタンドの一時ディレクトリタイプです。これらは公式文書ではないので、0 から 6 までの引数を試してみましたが、元と同じ例外を除いてうまくいきませんでした。
誰でもその方法を知っているか、コードにエラーがあります。前もって感謝します。