【发布时间】:2018-04-10 22:00:59
【问题描述】:
我正在尝试编写一个应用程序,如果在应用程序的文件夹中找不到它,它将创建一个本地数据库。我在删除 .mdf 后运行此查询
IF EXISTS (SELECT * FROM sys.databases WHERE name = N'Test_db')
BEGIN
DROP DATABASE Test_db
END
CREATE DATABASE Test_db
ON PRIMARY (NAME=Test_db, FILENAME='...\Test_db.mdf')
我的command.ExecuteNonQuery() 抛出异常,即使它删除了数据库并创建了一个新数据库。错误来自命令的DROP DATABASE 部分。
附加信息:无法打开物理文件 “...\Test_db.mdf”。操作系统错误 2:“2(系统无法 找到指定的文件。)”。
文件激活失败。物理文件名 “...\Test_db_log.ldf”可能不正确。
我找到了this的问题,但它没有解决问题。
【问题讨论】:
-
是
...在mdf文件实际代码的路径中,还是这是一个例子?您尝试写入此文件的路径可以从您的应用程序访问吗?我只是用这个路径检查你的代码:d:\Test_db.mdf它工作得很好 -
@gofr1 ...\ 就是一个例子。我使用
Environment.CurrentDirectory构建路径的方法,我只是替换了这些值以使其更易于阅读。但如前所述,.mdf 创建得很好,它只是删除了引发错误的数据库,因为我删除了 .mdf。 -
那么如果 DROP 应该这样做,为什么要删除文件?
-
@gofr1 我正在尝试处理
.mdf被删除的情况。我不能只创建数据库,因为它已经存在,删除它会引发错误。 -
据我所知,如果
mdf文件被删除,但数据库没有被删除(例如这种情况偶尔发生),那么它(默认情况下)进入RECOVERY_PENDING模式。您可以在state_descsys.databases表中查看它
标签: c# sql sql-server localdb