我的应用程序定期连接到 MyDatabase 并执行查询。
我需要处理 MyDatabase 数据库尚不存在且需要创建的情况。我当前正在做的是每次第一次连接到主数据库并运行如下所示的操作:
SELECT * FROM sysdatabases WHERE NAME='MyDatabase'
判断MyDatabase是否存在。如果没有,我将创建它,然后继续连接到 MyDatabase 并执行查询。
打开与主数据库的单独连接并每次执行查询似乎没有必要(即使连接是池化的)。为什么我不能立即连接到 MyDatabase?99% 的情况下它会成功并且我可以执行查询。失败的 1% 的时候我可以检测到 MyDatabase 丢失并在那时创建它,对吗?
但当我尝试这个时,我遇到了问题。如果我尝试连接到 MyDatabase 但它不存在,我会收到 SqlException
无法打开登录请求的数据库 MyDatabase。登录失败。
美好的。伟大的。我可以捕获任何 SqlException,然后转到主数据库以确定 MyDatabase 不存在并创建它。
但创建它后,当我现在尝试连接到 MyDatabase 时,我立即收到相同的错误:
无法打开登录请求的数据库 MyDatabase。登录失败。
看起来它没有尝试再次连接,而是返回缓存的结果。如果我在创建数据库后等待 10 秒再尝试连接它,则连接会成功。
我的问题是,这种缓存是否是预期的(我猜是这样),更重要的是是否有处理这种情况的最佳实践?我可以使用 SqlConnection API 中是否有缓存清除或超时设置?我认为我可以实现自己的超时延迟,但我想知道我是否缺少更好的方法。
sql-server ×1