我在ASP.NET应用程序(框架4.0)中使用System.Data.SQLite提供程序.我遇到的问题是,当我在SQLite数据库的表中插入某些内容时,数据库会被锁定,即使在连接处理后锁也没有被释放.
尝试访问该文件时,错误是:"进程无法访问文件'catalog.sqlite',因为它正由另一个进程使用."
我的代码非常简单,我打开连接,从SQLServer数据库读取一些数据,将数据插入SQLite(通过SQLiteDataAdapter),然后关闭连接并处置所有内容以保证安全.但是,当我在填充数据后尝试压缩文件时,我得到了这个错误.
我已经在StackOverflow上阅读了所有类型的建议,但没有一个能帮助解决问题(关闭防病毒软件,更改事务模型,在压缩文件之前等待几秒钟,将所有插入调用包装到事务中,等等.但没有人帮助解决这个问题.
也许有一些特定于ASP.NET的东西(多线程是问题?即使我在开发机器上测试它,只有一个调用该函数而没有并发?)
作为旁注,我尝试避免使用DataTable和SQLiteDataAdapter,并且直接使用SQLiteCommand,这样就可以实现魅力.当然,我可以继续将查询构建为字符串而不是使用数据适配器,但是当有一个构建框架时,我发现它有点尴尬.
我创建了一个简单的程序来删除C#中的临时文件(为了好玩,而不是一个主要项目),并且遇到锁定文件(使用中)问题.你通常如何排除这些文件?作为参考,我收到错误:
该进程无法访问文件'ExchangePerflog_8484fa31c65c7a31cfcccd43.dat',因为它正由另一个进程使用.
码:
static void Main(string[] args)
{
string folderPath = string.Empty;
folderPath = System.Environment.GetEnvironmentVariable("temp");
deleteFilesInDirectory(folderPath);
}
public static void deleteFilesInDirectory(string folderPath)
{
try
{
var dir = new DirectoryInfo(folderPath);
dir.Attributes = dir.Attributes & ~FileAttributes.ReadOnly;
dir.Delete(true);
MessageBox.Show(folderPath + " has been cleaned.");
}
catch (System.IO.IOException ex)
{
MessageBox.Show(ex.Message);
return;
}
}
Run Code Online (Sandbox Code Playgroud) 我正在开发一个 C# 应用程序,其后端为 sqlite。在我的应用程序中,我有一个用于清理数据库的按钮(删除 .db 文件并使用一些初始数据再次创建它)。有时,当我尝试删除数据库时,它说无法删除它,因为它正在被另一个进程使用。在删除它之前,我使用了关闭连接、处理和清除池功能。即使那样,它也会抛出相同的异常。这是我的代码:
string targetDataBaseFilePath = Path.Combine(dataDirectoryPath, "local.db");
ThingzDatabase.Create(targetDataBaseFilePath, "touchdb");
Run Code Online (Sandbox Code Playgroud)
在创建函数中,我定义了以下代码,从那里我得到错误:
if (File.Exists(DatabaseFileName))
{
try
{
ThingzDatabase.localdb.conn.Close();
ThingzDatabase.localdb.conn.Dispose();
SQLiteConnection.ClearAllPools();
}
catch (Exception)
{
}
File.Delete(DatabaseFileName); //error throws from here.
}
Run Code Online (Sandbox Code Playgroud)
如何防止错误被抛出?
我面临着我的应用程序的问题.它是一个桌面应用程序,由c#和Sqlite DB组成,用于缓存,并且是多线程的.我的问题有时是缓存操作与其他线程的操作冲突.
任何人都可以帮助我或如何解决是两难?
我想解锁数据库(也许重启程序),但我知道这不是一个好方法.
嗨,我目前正在开发一个生成模板 SQLite 数据库的应用程序,我遇到了在特定步骤后未释放文件的过程的问题。堆栈跟踪如下。
{
"ClassName": "System.AggregateException",
"Message": "One or more errors occurred.",
"Data": null,
"InnerException": {
"ClassName": "System.IO.IOException",
"Message": "The process cannot access the file 'C:\Users\James\AppData\Local\Temp\AutoGeneratedDBTemplate-16-11-15-7f3bbbde-6513-4860-bf43-6847a61bb25c.db' because it is being used by another process.",
"Data": null,
"InnerException": null,
"HelpURL": null,
"StackTraceString": " at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)\r\n at System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost)\r\n at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess …Run Code Online (Sandbox Code Playgroud)