gpt4 book ai didi

c# - 如何吞咽……有具体原因的异常

转载 作者:行者123 更新时间:2023-12-01 18:58:21 25 4
gpt4 key购买 nike

在这个方法中

    public static void Detach()
{
try
{
using (var master = new DataContext(@"Data Source=(LocalDB)\MSSQLLocalDB;Initial Catalog=master;Integrated Security=True"))
{
master.ExecuteCommand(string.Format("ALTER DATABASE [{0}] SET OFFLINE WITH ROLLBACK IMMEDIATE", DatabaseFile));
master.ExecuteCommand(string.Format("exec sp_detach_db '{0}'", DatabaseFile));
}
}
catch (Exception e)
{
... // add to log
}
}

我可以收到异常

System.Data.SqlClient.SqlException (0x80131904): The database 'blablabla.mdf' does not exist. Supply a valid database name. To see available databases, use sys.databases.

如果在未附加数据库时调用 Detach(),就会发生这种情况。

我的问题是:如何仅吞咽此特定消息以避免记录它?

文本可能已本地化,因此这不起作用

if(!(e is SqlException && e.Message.Contains("Supply a valid database name"))) 
... // log

我不确定错误代码对于这种特定情况是否是唯一的(谷歌证明了这一点?)

if(!(e is SqlException && e.Message.Contains("0x80131904"))) 
... // log

我当然可以

try { ... } catch {}

但是我没有机会记录一些意外的事情,这可能会帮助我解决问题,以防出现问题。

最佳答案

您不想检查消息 - 您想检查 SQL 特定编号。您可以使用 SqlException.Number为此的属性(property)。

我会使用:

// I think this is right, based on
// http://technet.microsoft.com/en-us/library/cc645936(v=sql.105).aspx
private const int DatabaseDoesNotExistCode = 15010;
...
catch (SqlException e)
{
if (e.Number != DatabaseDoesNotExistCode)
{
...
}
}

(我通常不会捕获普通的异常...但这可能是另一回事。)

关于c# - 如何吞咽……有具体原因的异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27441562/

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