ASP.NET数据库一直损坏

4
我是一个相对新手的ASP.net开发者(只有两周的基础应用经验),我的数据库出现了一个大问题。
我正在构建一个简单的电子邮件应用程序,其中包括登录系统。几天前一切都很正常。
但不知怎么的,每次尝试使用程序访问数据库文件时,我都会遇到以下错误:
*Server Error in '/' Application. The database file may be corrupted. Run the repair utility to check the database file. [ Database name = C:\Users\ArvinAsus\Documents\Visual Studio 2010\Projects\mailer\App_Data\Database.mdf ] Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. Exception Details: System.Data.SqlServerCe.SqlCeException: The database file may be corrupted. Run the repair utility to check the database file. [ Database name = C:\Users\ArvinAsus\Documents\Visual Studio 2010\Projects\mailer\App_Data\Database.mdf ]*
每个数据库都会显示这个错误,无论我使用过去曾经工作过的数据库还是只是创建一个新的空数据库。
我感觉这个问题与数据库损坏无关,而是与我遇到的另一个问题有关:
当我在服务器资源管理器中连接本地数据库时,我可以添加表格、填充数据、测试连接总是成功的。但是当我尝试通过我的程序连接数据库时:
*Exception Details: System.Data.SqlServerCe.SqlCeException: There is a file sharing violation. A different process might be using the file. [ C:\Users\ArvinAsus\Documents\Visual Studio 2010\Projects\mailer\App_Data\Database.mdf ]*
然后我关闭服务器资源管理器中的连接,错误就消失了,留下了一个损坏的错误。
我完全被这个问题卡住了。有没有人有想法可以帮助我解决问题?
提前感谢您。
PS:我正在使用Visual Studio 2010专业版。

你可以看一下这个链接:https://dev59.com/H0bRa4cB1Zd3GeqPxzDW - James Black
3个回答

3

一个.MDF文件并不是SQL Compact Edition数据库文件,而是SQL Server数据文件。您应该使用SQL Server(Express、Professional或任何其他版本)来访问您的数据库,并使用SQL Native Client、OleDB或任何其他数据连接器连接到它,而不是使用SQLServerCE。


谢谢,我会尝试一下。唯一不明白的是为什么几天前它以完全相同的方式工作了?Visual Studio安装了SQLserverCE,那么为什么它会创建.mdf数据库,如果这不适用于SQL Compact Edition呢? - Arvin
没有头绪! :-/ 我看到过几个案例,人们可以在 SQL Server 关闭的情况下读取 MDF 文件,所以我猜这两种文件格式共享一些基本结构。 - Yván Ecarri

2
你的异常告诉你发生了什么:存在文件共享冲突。可能有其他进程正在使用该文件。 很多进程即使在使用完文件后也不会释放它们。你应该使用一个实际的SQL服务器实例(即使是Express)来管理对数据库的连接。
我点赞@Y. Ecarri的答案,因为我认为他有正确的解决方案,但最可能导致文件共享冲突的原因是开发环境本身。如果你正在使用内置的Cassini服务器(很可能是)来进行IDE调试,它将在调试会话之间保持开发Web服务器处于活动状态。由于第一个会话使你的.mdf实例保持在内存中并被占用,所以后续的调试会话将无法访问它,尽管它应该可用。为了释放该文件,您需要停止调试,然后右键单击系统托盘中代表开发Web服务器实例的任何图标,并告诉它们停止

很好的解释!这解决了我在之前评论中提到的谜团。 - Yván Ecarri
谢谢你的回答。然而,按下停止调试并不能解决文件共享冲突错误。在系统托盘中停止服务器也没有帮助!我将尝试使用SQL Server Express并使用.sdf文件来看看是否可以解决问题。 - Arvin
我解决文件共享冲突的唯一方法是进入服务器资源管理器并关闭数据库连接。 - Arvin
不仅需要停止调试,还需要停止与该环境会话相关的所有Web服务器实例。但是,如果你担心外部来源锁定了你的文件,关闭IDE并重新打开它可能会告诉你是否是这个原因。 - Joel Etherton
@user1818243:实际上,是的,你又发现了 IDE 将你的文件“扣押”的另一种方式。这也是为什么建议你始终使用某种形式的 SQL 实例而不是文件的主要原因。 - Joel Etherton
非常感谢您的帮助,我现在会尝试修复它。 - Arvin

0
我的问题是我的web.config文件被修改了。数据库的物理位置已经改变,导致出现了这个错误。数据库仍然存在,但它没有指向正确的位置。
为了确保这不是问题,请仔细检查您的web.config文件。希望这能帮助到某些人。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接