sqlite 无法访问试图发送文件流的文件

s4n0splo  于 2023-08-06  发布在  SQLite
关注(0)|答案(1)|浏览(111)

我想发送一个文件流(一个SQLite数据库文件)。我得到了:
ASP.NET Core中的Sqlite3面向System.IO.IOException:该进程无法访问该文件,因为它正被另一个进程使用

private void UpdateTestCaseDbFiles(string dnFile)
{
    string strConn = @"Data Source=" + dnFile;

    SQLiteConnectionStringBuilder builder = new SQLiteConnectionStringBuilder(strConn);
    builder.Pooling = false;

    SQLiteConnection conn = new SQLiteConnection(builder.ConnectionString);
    conn.Open();

    conn.Close();
    conn.Dispose();

    SQLiteConnection.ClearPool(conn);

    SQLiteConnection.ClearAllPools();
}

字符串
根据this,我把禁用,但它不工作。调用函数后,我发送文件流:

FileStream fileStream = new FileStream(fileName, FileMode.Open, FileAccess.Read); --exception.
return File(fileStream, "application/octet-stream", fileName);

2cmtqfgy

2cmtqfgy1#

一种解决方法可能是首先在应用程序中进行数据库备份,然后在创建流时使用该备份文件。备份文件将不处于锁定状态。
您可以使用此方法创建备份文件:

public static void BackupDatabase(string sourceDbPath, string destinationDbPath)
{
    using var sourceDbConnection = new SQLiteConnection($"Data Source={sourceDbPath}; Version=3;");
    using var destinationDbConnection = new SQLiteConnection($"Data Source={destinationDbPath}; Version=3;");
    sourceDbConnection.Open();
    destinationDbConnection.Open();
    sourceDbConnection.BackupDatabase(destinationDbConnection, "main", "main", -1, null, 0);
}

字符串
然后,如果您愿意,可以删除新创建的备份文件。

相关问题