i创建一个应用程序,该应用程序使用本地数据库,该数据库存储在AppData文件夹中。我创建了一个DataContext
来获取数据:
private NorthWindDataContext northWindDataContext = new NorthWindDataContext(connectionString);
在应用程序的每个启动下,它检查数据库是否存在。如果不存在,则应创建数据库:
DB:
if (!northWindDataContext.DatabaseExists())
{
try
{
northWindDataContext.CreateDatabase();
}
catch (Exception ex1)
{
try
{
northWindDataContext.DeleteDatabase();
}
catch (Exception ex2)
{
}
}
goto DB;
}
这可以正常工作,但是如果我在目录中删除文件并再次启动应用程序,则在使用CreateDatabase
创建数据库时将获得以下执行。
"数据库'c: users me appdata local test northwind.mdf'已经存在。选择其他数据库名称。"
如果CreateDatabase
-Method失败,则应使用DeleteDatabase
删除数据库(实际上不存在(。这不是应用程序抛出的例外。然后,它应该尝试再次创建数据库。现在,该应用程序不会在CreateDatabase
上投掷执行,但也不是创建的数据库文件。
这在应用程序的每个启动中都会发生,如果用户删除了数据库文件,那么我做错了什么或缺少什么?
数据上下文默认使用localdb的实例...删除数据库文件( .mdf
file(并不意味着在localdb的此实例中不存在数据库再过了。您可以通过删除任何.mdf
文件并查询服务器的主数据库
select * from sys.databases
您会发现数据库即使在删除文件后也已经存在,这就是为什么如果您尝试创建数据库,并且可能无法满足条件!northWindDataContext.DatabaseExists()
,则您正在获得数据库退出错误,因为LocalDB认为LocalDB仍然认为它仍然具有db
我尝试打开SQL Server Management Studio并从那里删除数据库,然后我找不到一个文件错误,此时LocalDB注意到数据库已被删除,并且已将其从对象Explorer和sys.databases
视图中删除