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