Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# sqlite3\u win32\u set\u directory/sqlite3.SetDirectory的用途是什么?_C#_Sqlite_Windows Runtime_Sqlite Net - Fatal编程技术网

C# sqlite3\u win32\u set\u directory/sqlite3.SetDirectory的用途是什么?

C# sqlite3\u win32\u set\u directory/sqlite3.SetDirectory的用途是什么?,c#,sqlite,windows-runtime,sqlite-net,C#,Sqlite,Windows Runtime,Sqlite Net,您好,我已经安装了sqlite net nuget包,它附带了两个cs文件:sqlite.cs和SQLiteAsync.cs SQLite.cs包含一个名为SQLite3的类,该类包含以下方法: [DllImport("sqlite3", EntryPoint = "sqlite3_win32_set_directory", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Unicode)] public static

您好,我已经安装了sqlite net nuget包,它附带了两个cs文件:sqlite.cs和SQLiteAsync.cs

SQLite.cs
包含一个名为
SQLite3
的类,该类包含以下方法:

[DllImport("sqlite3", EntryPoint = "sqlite3_win32_set_directory", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Unicode)]
public static extern int SetDirectory(uint directoryType, string directoryPath);
我看到
SQLiteConnection
构造函数具有以下代码:

#if NETFX_CORE
         SQLite3.SetDirectory(/*temp directory type*/2, Windows.Storage.ApplicationData.Current.TemporaryFolder.Path);
#endif
但是为什么呢?!这是做什么的?为什么每次创建新的SQLiteConnection时都需要设置它?这行代码似乎有零星的
AccessViolationExceptions

更新 我找到了这个方法的文档,但仍然不理解TempDirectory的用途。那里写了什么

/*
** This function sets the data directory or the temporary directory based on
** the provided arguments.  The type argument must be 1 in order to set the
** data directory or 2 in order to set the temporary directory.  The zValue
** argument is the name of the directory to use.  The return value will be
** SQLITE_OK if successful.
*/

SQLiteConnection
构造函数显示的特定调用为SQLite设置临时目录。这是SQLite用于临时/工作存储的目录

我相信由于应用程序沙盒,SQLite无法写入默认的临时目录;这就是您引用的代码使用应用程序的临时目录的原因

如果未设置目录,则副作用是在执行update语句时出现错误

请参阅此处的更多信息:

  • 烟囱溢流柱-

感谢您提供这些有见地的链接。我现在想知道的是,是否必须在每次创建新的SQLiteConnection时设置此选项。只设置一次临时目录还不够吗?或者,当当前连接关闭时,该值会自动重置吗?该连接上的文档不存在,因此我进行了有根据的猜测。在查看SQL Net源代码时,临时目录是在建立任何类型的连接之前设置的。这会让我相信它不是基于连接的,临时目录只需要设置一次。当然,你会想测试并确定。这是我能找到的最好的:但我认为你是正确的。我向SQLite3添加了一个“IsTempDirSet”属性。我会尽快测试这个。谢谢