gpt4 book ai didi

sqlite - 更新sqlite db中的记录时出现MethodAccessException

转载 作者:行者123 更新时间:2023-12-03 17:50:53 24 4
gpt4 key购买 nike

当我尝试使用以下语句更新记录时遇到此异常。

UPDATE GroupTable SET groupId=100 WHERE groupId=101

我在 Firefox 插件的 SQLite Manager 下测试了该语句,它可以工作。
错误信息如下图所示。它坠毁在 os_win_c.cs ,该方法名为 getTempname() .
enter image description here

最佳答案

好吧,我修改了原始代码并修复了这个错误。
Path.GetTempPath() 不起作用,因为沙箱环境。它没有访问权限。
我通过以下代码修复。它现在有效。

static int getTempname(int nBuf, StringBuilder zBuf)
{
const string zChars = "abcdefghijklmnopqrstuvwxyz0123456789";
StringBuilder zRandom = new StringBuilder(20);
i64 iRandom = 0;
for (int i = 0; i < 20; i++)
{
sqlite3_randomness(1, ref iRandom);
zRandom.Append((char)zChars[(int)(iRandom % (zChars.Length - 1))]);
}

//! Modified by Toro, 2011,05,10
string tmpDir = "tmpDir";
IsolatedStorageFile store = IsolatedStorageFile.GetUserStoreForApplication();
store.CreateDirectory(tmpDir);
//zBuf.Append(Path.GetTempPath() + SQLITE_TEMP_FILE_PREFIX + zRandom.ToString());
zBuf.Append(tmpDir + "/" + SQLITE_TEMP_FILE_PREFIX + zRandom.ToString());

return SQLITE_OK;
}

以上补丁会导致isolatedstorage中多出一个文件夹 tmpDir,临时文件不会自动删除,需要自行删除。我试图在 tmpDir 中的 winClose 方法中删除 os_win_c.cs 中的那些文件,我发现当我执行 VACUUM 时会导致崩溃。最后,我在关闭数据库时删除了那些 tmp 文件。以下是 SQLiteConnection 类中的 Dispose 方法。
public void Dispose()
{
if (_open)
{
// Original codes for close sqlite database
Sqlite3.sqlite3_close(_db);
_db = null;
_open = false;

// Clear tmp files in tmpDir, added by Toro 2011,05,13
IsolatedStorageFile store = IsolatedStorageFile.GetUserStoreForApplication();
string tmpDir = "tmpDir";
if (store.DirectoryExists(tmpDir) == false) return;

string searchPath = System.IO.Path.Combine(tmpDir, "*.*");
foreach (string file in store.GetFileNames(searchPath)) {
store.DeleteFile(System.IO.Path.Combine(tmpDir, file));
}
}
}

关于sqlite - 更新sqlite db中的记录时出现MethodAccessException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5948499/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com