在上次连接错误后连接到新创建的数据库

时间:2013-07-10 11:46:57

标签: sql-server

我的应用程序定期连接到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中的缓存清除或超时设置?我想我可以实现自己的超时延迟,但我想知道我没有更好的方法。

1 个答案:

答案 0 :(得分:1)

我有完全相同的问题。

在我尝试打开新创建的数据库之前调用静态SqlConnection.ClearAllPools()方法时,它运行正常!