在这个方法中
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):数据库“blablabla.mdf”不存在。提供有效的数据库名称。要查看可用的数据库,请使用 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 {}
但后来我没有机会记录一些东西意外,如果出现问题,什么可以帮助我解决问题。
你不想检查message- 您想要检查 SQL 的具体编号。您可以使用SqlException.Number http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlexception.number(v=vs.110).aspx为此的财产。
我会用:
// 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)
{
...
}
}
(我通常会not抓住平原Exception
...但这可能是另一回事。)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)