gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 09:27:27 27 4
gpt4 key购买 nike

我的应用程序定期连接到 MyDatabase 并执行查询。

我需要处理 MyDatabase 数据库尚不存在且需要创建的情况。我当前正在做的是每次第一次连接到主数据库并运行如下所示的操作:

从系统数据库中选择 * WHERE NAME='MyDatabase'

判断MyDatabase是否存在。如果没有,我将创建它,然后继续连接到 MyDatabase 并执行查询。

打开与主数据库的单独连接并每次执行查询似乎没有必要(即使连接是池化的)。为什么我不能立即连接到 MyDatabase? 99% 的情况下它会成功并且我可以执行查询。失败的 1% 的时候我可以检测到 MyDatabase 丢失并在那时创建它,对吗?

但是当我尝试这个时,我遇到了问题。如果我尝试连接到 MyDatabase 但它不存在,我会收到 SqlException

Cannot open database MyDatabase requested by the login. The login failed.

好吧。伟大的。我可以捕获任何 SqlException,然后转到主数据库以确定 MyDatabase 不存在并创建它。

但是创建它之后,当我现在尝试连接到 MyDatabase 时,我立即收到相同的错误:

Cannot open database MyDatabase requested by the login. The login failed.

看起来它没有尝试再次连接,而是返回缓存的结果。如果我在创建数据库后等待 10 秒再尝试连接它,则连接会成功。

我的问题是,这种缓存是否是预期的(我猜是这样),更重要的是,是否有处理这种情况的最佳实践?我可以使用 SqlConnection API 中是否有缓存清除或超时设置?我认为我可以实现自己的超时延迟,但我想知道我缺少更好的方法。

最佳答案

我遇到了完全相同的问题。

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

关于sql-server - 在上次连接错误后连接到新创建的数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17569844/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com