Как поймать и обработать повторяющуюся ошибку при вставке данных через хранимую процедуру - PullRequest
0 голосов
/ 25 мая 2020

У меня есть хранимая процедура для вставки данных в таблицу.

Вот как я вызываю хранимую процедуру из метода контроллера:

var insert_query = entities.Database.SqlQuery<Call_Info>("exec [dbo].[insert_call_info] @call_id, @user_id, @call_arrive, @call_end, @info",
                    new SqlParameter("call_id", call_id),
                    new SqlParameter("user_id", u_id),
                    new SqlParameter("call_arrive", call_arrive),
                    new SqlParameter("call_end", call_end),
                    new SqlParameter("info", info)
                    ).ToList();

 var jsonResult = JsonConvert.SerializeObject(insert_query); // <-- using Newtonsoft.Json
 return Json(jsonResult);

Если я вставляю значение call_id, которое уже хранится в таблице, я получаю эту ошибку, которая правильно:

Сообщение ":" Произошла ошибка

Нарушение ограничения UNIQUE KEY 'UQ__Call_Inf__427DCE6904E3DF9B'. Невозможно вставить повторяющийся ключ в объект 'dbo.Call_Info'. Повторяющееся значение ключа - (91390).

Есть ли способ отловить эту ошибку в контроллере?

Ответы [ 2 ]

2 голосов
/ 25 мая 2020

Определенно. Вы можете использовать блок try catch для захвата SqlException

try
{
    //SQL query
}
catch(SqlException ex)
{
    foreach(SqlError err in ex.Errors)
    {
        if((err.Number == 2601) //unique nonclustered index
            || (err.Number == 2627)) //unique constraint
        //handle it
    }
}
1 голос
/ 25 мая 2020

Используйте

catch(SqlException ex) 
{

}

Как отловить конкретную c ошибку SqlException?

...