我正在尝试处理一个异常,我知道它的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,所以我不需要比较所有字符串值?
答案 0 :(得分:2)
我认为您要查看的是SqlException.Number(这是SQL的错误号),而不是SqlException.ErrorCode(这是SQL驱动程序的错误号)。
static 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