Я пытаюсь поймать конкретный SqlException
515 (Не могу вставить значение NULL в столбец), и я не могу предварительно проверить значение до фактического INSERT
. Я могу только зафиксировать ошибку и определить, какая она была.Вызвать метод sqlexception для вызова, который использует регулярное исключение?
В следующем исполнении alert()
может отображать эти сообщения: есть где-то пустое значение (от SqlException
515) или общая ошибка, заявляющая, что что-то не так.
В этом случае я знаю, что могу создать и выбросить пользовательскую ошибку исключения, но я хотел бы использовать только то, что у меня есть здесь, поскольку SqlException
будет фиксировать точную ошибку.
Кроме того, эти два метода находятся в двух разных классах, и я хочу включить только System.Data.SqlClient
, где используется метод Insert()
.
Наконец, я могу использовать обычный System.Exception
с помощью метода substring
и поиска конкретной строки. Но должен быть лучший способ.
Так вот мой псевдокод:
public void InsertNewCar()
{
try
{
Car myCar = new Car();
myCar.Insert();
}
catch (Exception ex)
{
alert(msg); //Alerts the user: "Something missing" or "generic error"
}
}
public void Insert()
{
try
{
SqlHelper.ExecuteNonQuery(ConnString, CommandType.Text, sqlInsert);
}
catch (SqlException ex)
{
if (ex.Number == 515)
{
//throw exception specifying that something's missing in the INSERT
}
else
{
throw ex; //throw ex that will be interpreted as a generic error.
}
}
}
Мой вопрос: когда я захвачу SqlException
515, что я могу с ним делать? Как только я его брошу, я не могу проверить номер ошибки в пределах InsertNewCar()
.
Я могу иметь Insert()
вернуть значение, но тогда Исключение не будет выбрано. И я не хочу использовать ключевое слово ref
.
Спасибо.
«Как только я бросаю его, я не могу проверить номер ошибки в InsertNewCar()» - вы можете, если вы поймаете 'SqlException' в' InsertNewCar' ... Или вы можете использовать другой вид исключения и catch *, который * в 'InsertNewCar'. –
Но все sql-связанные находятся в классе, где находится Insert(). Я просто не хотел добавлять пространство имен 'System.Data.SqlClient' именно для этого. Но я думаю, это можно сделать так. – rbhat
Правильно, поэтому бросайте другое исключение, как и во вторую часть моего комментария ... –