我正在尝试处理一个异常,我知道它的ErrorCode是26,但是它没有返回正确的整数,给我-2146232060。
Screenshot of QuickWatch with the exception description
所以不用写这个:
catch (SqlException e)
{
if (e.ErrorCode == 26)
{
//my code
}
}
我必须使用这个:
catch (SqlException e)
{
if (e.Message.ToUpper().Contains("ERROR: 26"))
{
//my code
}
}
为什么返回-2146232060,如何得到26,所以我不需要比较所有字符串值?
最佳答案
我认为您要查看的是SqlException.Number(这是SQL的错误号),而不是SqlException.ErrorCode(这是SQL驱动程序的错误号)。
静态void Main(string [] args){
try {
var connection = new SqlConnection(@"Data Source=(localdb)\mssqllocaldb;Initial Catalog=Sandbox;Integrated Security=SSPI;");
connection.Open();
var command = new SqlCommand("throw 50000, 'oops', 1;", connection);
command.ExecuteNonQuery();
}
catch (SqlException ex) {
Console.WriteLine(ex.ErrorCode + ": " + ex.Number + ": " + ex.Message);
for (int i = 0; i < ex.Errors.Count; i++)
Console.WriteLine(ex.Errors[i].Number + ": " + ex.Errors[i].Message);
}
catch (Exception ex) {
Console.WriteLine(ex.Message);
};
}
...产量...
-2146232060: 50000: oops
50000: oops
有关MSDN上的SqlException以及您收到的here特定错误的更多信息。
关于c# - SqlException ErrorCode返回-2146232060,而不是26(找不到服务器实例),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51031381/