Raiserror в процедуре (SQL Server 2005) не перехватывается в процессе обновления на стороне клиента (c #) - PullRequest
0 голосов
/ 11 ноября 2009

Я использую хранимую процедуру с RAISERROR. Ошибка, возникшая у SP, не перехватывается оператором try catch в c # .Net. Я использую SqlDataSource для соединения SQL и событие SqlDataSource_Updating для обновления данных.

Код SQL:

DECLARE @count int
@count=0
   if(@count = 0)
   begin
   RAISERROR('Updation failed. record already exists', 16, 1) 
  end

c # Код:

protected void sqlDataSource_Updating(object sender, SqlDataSourceCommandEventArgs e)
{
  try
  {
    // Assigns the update command parameter
    e.Command.Parameters.Add(new SqlParameter("@fag", Flg));
    e.Command.Parameters.Add(new SqlParameter("@Date", DateTime.Now));

  }
  //catch (SqlException ex)
  //{


  //}
  catch (Exception ex)
  {
    // If so, checks the Exception message
    if (ex.Message == "Updation failed. record Not exists")
    {
        // Display the details of the exception to the user
        lblMessage.Text = " record already exists";
    }

    // Writes the error in log file
    WriteErrorLog(ex.Message , "sqlDataSource_Updating");
  }
}

SqlDataSource:

                SelectCommand="SELECT [ID], [Name], [Flg] FROM [Master] ORDER BY Name "  

                InsertCommand="exec [Master_Insert] @ID, @Name, @Flg, @createdDate, @createdBy, @updatedDate, @updatedBy"

                UpdateCommand="exec [Master_Update] @ID, @Name, @Flg, @updatedDate, @updatedBy"

                 DeleteCommand="DELETE FROM Master WHERE ID = @ID" 
                            oninserted="sqlDataSource_Inserted" 
                            oninserting="sqlDataSource_Inserting" 
                            onupdated="sqlDataSource_Updated" 
                            onupdating="sqlDataSource_Updating"> 
                </asp:sqldatasource>

С уважением Гита

Ответы [ 3 ]

1 голос
/ 11 ноября 2009

Событие Updating используется для настройки выполняемой команды SqlCommand, но она не выполняет команду. Блок try / catch должен переносить фактическое место, где выполняется команда, а не обратный вызов настройки.

0 голосов
/ 12 ноября 2009

Спасибо за все ваши ответы.

Используя e.Exception в sqlDataSource_Updated, моя проблема была решена.

protected void sqlDataSource_Updated(object sender, SqlDataSourceStatusEventArgs e)

{

       if (e.Exception != null)
            {

                // If so, checks the Exception message

                if (e.Exception.Message == "record already exists")

                {

                }
         }
}
0 голосов
/ 11 ноября 2009

Одна вещь, которую я сразу заметил, состоит в том, что сообщение об ошибке, которое вызывает ваша хранимая процедура «Обновление не удалось. запись уже существует » не соответствует текстовой строке «Обновление не удалось. запись не", который вы проверяете в своем блоке try / catch.

...