gpt4 book ai didi

c# - MySQL try-catch 无法正常工作

转载 作者:行者123 更新时间:2023-11-29 13:54:06 26 4
gpt4 key购买 nike

我正在尝试从 MySQL 捕获错误 1045(访问被拒绝),但我遇到了一些奇怪的问题..我的代码有问题吗?

它没有处理异常,而是在 VS 中抛出一个异常?

private bool connOpen()
{
bool kleir = false;
try
{
conn.Open();
kleir = true; // throws exception here
}
catch (MySqlException ex)
{
switch (ex.Number)
{
case 1045:
MainWindow.connError = true;
break;
}
kleir = false;
}
return kleir;
}

最佳答案

假设你正在 VS 中调试它。即使您有异常处理程序,VS也会在异常发生时停止,因为您处于 Debug模式。如果您在工作室之外运行此代码,则异常将由该 block 处理。您还应该能够简单地按 F5(运行)来继续。

但在我看来,这只是一个余兴节目。您显示的代码非常糟糕。此代码片段意味着您正在打开一个连接,使用它来进行一个或多个数据库调用,然后在此过程中的某个地方您可以使用另一种方法来关闭它。

您永远不应该在远离实际使用连接的地方初始化/管理连接。连接池完全能够正确处理大量连接/断开连接。您应该将这些代码放在一起的原因很简单,连接上打开/关闭之间的事物越多,您的代码未正确处理这些对象的机会就越多。当它们没有被处理掉时,连接池将会出现非常奇怪且难以调试的问题,并且内存使用量会大幅上升。

连接和命令数据库对象是非托管对象。它们实现 IDisposable 因为它们控制非托管资源。正确方法的一个例子是:

using (SqlConnection conn = new SqlConnection(connstring)) {
using (SqlCommand cmd = new SqlCommand(conn)) {
// do atomic database stuff
}
}

using 语句将自动关闭并处置这些对象。连接池(您甚至不必考虑)将确保如果您调用上述代码 1000 次,它仍然运行得超快。

关于c# - MySQL try-catch 无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16157287/

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