C# 另一个进程正在使用db.mdf

C# 另一个进程正在使用db.mdf,c#,filestream,localdb,file-locking,C#,Filestream,Localdb,File Locking,现在按代码显示如下所示: private void DatabaseIntegrityCheck() { try { string m_checksum; using (FileStream stream = File.OpenRead(@"C:\~\db.mdf")) { SHA256Managed sha = new SHA256Managed(); byte[] checksum

现在按代码显示如下所示:

private void DatabaseIntegrityCheck()
{
    try
    {
        string m_checksum;
        using (FileStream stream = File.OpenRead(@"C:\~\db.mdf"))
        {
            SHA256Managed sha = new SHA256Managed();
            byte[] checksum = sha.ComputeHash(stream);
            m_checksum = BitConverter.ToString(checksum).Replace("-", String.Empty);
        }

        Console.WriteLine(m_checksum);

    }
    catch (Exception ex)
    {
        Console.WriteLine("unable to retrieve checksum");

    }

}
当我在代码中设置断点以查看异常是什么时,我会得到一个IOException,它说:

进程无法访问文件“db.mdf”,因为另一个进程正在使用该文件

我运行校验和的方式是在我的窗口中有一个按钮,当我单击它时,上面的方法被调用以执行操作。我想先检查一下它是否工作,所以我只需要Console.WriteLine检查和散列,但是上面的异常被抛出


我能做些什么来解决这个问题

请尝试以下代码:

        try
        {
            string mChecksum;
            using (FileStream stream = File.OpenRead(@"E:\draft.pdf"))
            {
                var sha = new SHA256Managed();
                var cs = new CryptoStream(stream, sha, CryptoStreamMode.Read);
                cs.FlushFinalBlock();
                byte[] hash = sha.Hash;

                mChecksum = BitConverter.ToString(hash).Replace("-", String.Empty);
            }

            Console.WriteLine(mChecksum);

        }
        catch (Exception ex)
        {
            Console.WriteLine("unable to retrieve checksum");

        }

请参阅有关

的详细信息猜测您自己的应用程序正在使用该文件是否正确,因为您打开了与该数据库的连接?如果是这样,您需要关闭连接。如果没有,那么您需要确定哪个应用程序正在访问数据库文件,并将其关闭。@DanPuzey,是的,在我的应用程序中,这就是它的数据库。我想对我的应用程序正在使用的数据库运行完整性检查。在“数据连接”下的“我的服务器资源管理器”中,未列出数据库。所以连接应该被关闭。你确定你没有任何地方的代码访问数据库吗?我可以,但是我如何关闭它?你的意思是我需要关闭我的数据库使用块吗?如果文件已在其他地方锁定,则无法打开该文件。你说“检查数据库”是什么意思?您当前尝试计算的SHA在每次写入数据库时都会发生更改,因此我不确定您从中得到的值。这并不能解决问题。FlushFinalBlock()的作用是什么?