конкретизация SqlException

madgol
Дата: 16.04.2006 23:52:13
Как определить, что исключение вызвало например нарушение целостности таблицы (попытка удалить внешний ключ). Похоже что-то осмысленное выдает SqlException.Message, но не парсить же строку?
Nikulin
Дата: 17.04.2006 00:49:06
public static void ShowSqlException(string connectionString)
{
    string queryString = "EXECUTE NonExistantStoredProcedure";
    StringBuilder errorMessages = new StringBuilder();
    
    using (SqlConnection connection = new SqlConnection(connectionString))
    {
        SqlCommand command = new SqlCommand(queryString, connection);
        try
        {
            command.Connection.Open();
            command.ExecuteNonQuery();
        }
        catch (SqlException ex)
        {
            for (int i = 0; i < ex.Errors.Count; i++)
            {
                errorMessages.Append("Index #" + i + "\n" +
                    "Message: " + ex.Errors[i].Message + "\n" +
                    "LineNumber: " + ex.Errors[i].LineNumber + "\n" +
                    "Source: " + ex.Errors[i].Source + "\n" +
                    "Procedure: " + ex.Errors[i].Procedure + "\n");
            }
            Console.WriteLine(errorMessages.ToString());
        }
    }
}

Может поможет...
madgol
Дата: 17.04.2006 01:27:38
Nikulin
Может поможет...

Вопрос в том - как определить что вызвало исключение (а именно отловить нарушение целостности).
Путем разбора ex.Errors.Message? (там содержится что-то вроде "FOREIGN KEY constraint")
saint
Дата: 17.04.2006 12:15:42
ex.Errors[0].Number==547

это?
madgol
Дата: 17.04.2006 19:13:43
saint
ex.Errors[0].Number==547 это?
ъ
Да, спасибо.
Эти номера похоже перечисленны в master.dbo.sysmessages
RealMaksimus
Дата: 08.06.2006 09:10:41
Если бы только sysmessages.
Если клиент не может подсоединиться к серверу он выдает совершенно другие ошибки. "General network error" или "SQL Server does not exist". Вот бы список их кодов! Искал, не нашел.