Есть ли способ получить базу данных sqlException / Error при отладке в браузерах для создания соответствующего сообщения об ошибке catch? - PullRequest
0 голосов
/ 12 февраля 2012

Есть ли способ получить базу данных SQLException при отладке в браузерах?Скажем, например, нарушения первичного ключа (дублирование PK при добавлении записей)?

Я использую VS 2008 и SQL Server 2005, если это имеет значение.

Ответы [ 3 ]

0 голосов
/ 12 февраля 2012

Код SQL

Set NOCOUNT ON
Set XACT_ABORT ON

Begin Try
  ...Your SQL Code
End Try

Begin Catch
   Rollback Tran
   Select Error_Number() as No, Error_Message() as Message
End Catch

Ошибка уровня страницы

protected override void OnError(EventArgs e)
{
    Exception CurrentException = Server.GetLastError();
    string ErrorDetails = CurrentException.ToString();
    // this could also be a string[] if you prefer
    var script = string.Format("foo({0});", ErrorDetails);
    ClientScript.RegisterStartupScript(GetType(), "call", script, true);
    base.OnError(e);
}

Ошибка уровня приложения

void Application_Error(object sender, EventArgs e)
{
     Exception CurrentException = Server.GetLastError();
     string ErrorDetails = CurrentException.ToString();
     // this could also be a string[] if you prefer
     var script = string.Format("foo({0});", ErrorDetails);
     ClientScript.RegisterStartupScript(GetType(), "call", script, true);
     base.OnError(e);
}
0 голосов
/ 12 февраля 2012

Да, вы можете использовать System.Web.HttpContext для вывода окна сообщения с предупреждением JavaScript.

Вы помещаете System.Data.SqlClient.SqlCommand в триггер try, а в улове вы выводите Exception какпредупреждение JavaScript (вам нужно экранировать сообщение, чтобы специальные символы и кавычки обрабатывались правильно.

Вот мой метод (VB.NET)

Public Shared Sub Show(ByRef objMessage As Object, Optional ByRef strTitle As String = Nothing)
    Dim strMessage As String = CStr(objMessage)
    Dim pgCallingPage As Page = TryCast(HttpContext.Current.Handler, Page)
    If pgCallingPage IsNot Nothing Then
        strMessage = Microsoft.JScript.GlobalObject.escape(strMessage) ' Reference Microsoft.JScript.dll in the project reference
        strMessage = "<script type=""text/javascript"" language=""javascript"">alert(unescape(""" + strMessage + """));</script>"
        pgCallingPage.ClientScript.RegisterStartupScript(pgCallingPage.GetType(), System.Guid.NewGuid().ToString(), strMessage, False)
    End If
End Sub 

Здесь преобразование C #:

public static void Show(object objMessage, string strTitle = null)
{
    string strMessage = Convert.ToString(objMessage);
    Page pgCallingPage = HttpContext.Current.Handler as Page;
    if (pgCallingPage != null) {
        strMessage = Microsoft.JScript.GlobalObject.escape(strMessage);
        // Reference Microsoft.JScript.dll in the project reference
        strMessage = "<script type=\"text/javascript\" language=\"javascript\">alert(unescape(\"" + strMessage + "\"));</script>";
        pgCallingPage.ClientScript.RegisterStartupScript(pgCallingPage.GetType(), System.Guid.NewGuid().ToString(), strMessage, false);
    }
}

Если вам не нравятся окна с предупреждающими сообщениями (потому что нельзя скопировать вставку), я предлагаю вам просто вывести новую строку текста (будет в верхней части документа):

Public Shared Sub WriteLine(ByRef objMessage As Object)
    Dim strMessage As String = CStr(objMessage)
    HttpContext.Current.Response.Write("<br/><p style=""font-family: Verdana, Calibri, Arial, Helvetica, Sans-Serif; font-color: #FF0000; font-size: 10mm;"">" + HttpContext.Current.Server.HtmlEncode(strMessage) + "</p><br/>")
End Sub 


public static void WriteLine(object objMessage)
{
    string strMessage = Convert.ToString(objMessage);
    HttpContext.Current.Response.Write("<br/><p style=\"font-family: Verdana, Calibri, Arial, Helvetica, Sans-Serif; font-color: #FF0000; font-size: 10mm;\">" + HttpContext.Current.Server.HtmlEncode(strMessage) + "</p><br/>");
}
0 голосов
/ 12 февраля 2012

Запустите команду на сервере sql:

RAISERROR('Here comes the exception text', 16,1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...