gpt4 book ai didi

c# - 为什么 ODBCConnection.State 不可靠?

转载 作者:太空宇宙 更新时间:2023-11-03 22:20:08 25 4
gpt4 key购买 nike

考虑一个简单的设置:

// _conn is the OdbcConnection with a MySQL-Server (MySQL-Connector 3.51)
// _cmd is a created OdbcCommand

// Constructor has created the objects successfully

public void DoSomething() {
if(_conn.State == ConnectionState.Open)
_cmd.ExecuteNonQuery();
}

现在我的问题是,OdbcConnection.State 不可靠。问题是一段时间后连接丢失了,但是 State-Property 对此一无所知,并一直告诉我至少在我尝试执行之前连接是打开的一个命令(正常失败)。我什至遇到过 State-Property 永远不会刷新并一直告诉我连接仍然存在(但命令失败)的情况。

当然我可以在我的代码中添加 Try {...} Catch {...} block ,但我尽量避免使用它们,因为至少要用四行来扩展两行函数错误处理有点……繁重。

所以我的问题是:为什么 OdbcConnection.State 不可靠,我可以修复它吗?

最佳答案

网络的本质是,在您实际尝试发送数据之前,您通常不知道存在问题。如果您只是将插头从计算机背面拔出(或者将插头从客户端和服务器之间某处的开关中拔出),那么操作系统将无法知道,直到它实际尝试发送数据甚至还有问题。

那么,State 不可靠的原因是,如果不实际尝试向服务器发送数据,就不可能使其完全可靠。由于这对于一个简单的属性(整个网络往返)来说要完成的工作太多了,所以它没有这样做,而是尽可能地做最简单的事情。

此外,在您调用 State == Open 和实际执行命令之间存在竞争条件:您可能会调用 State == Open,并且然后有人在你执行命令之前拔下插头。

所以在一天结束时,无论如何您都必须拥有该异常处理程序。我还建议您不要在每次调用数据库时都设置异常。如果你正在做一个网站,那么有一个页面级处理程序并把它留在那里。除了向用户显示错误消息之外,尝试以任何其他方式“处理”数据库故障真的没有意义......

关于c# - 为什么 ODBCConnection.State 不可靠?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3438167/

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