почему мой обработчик ошибок global.asax не работает? - PullRequest
0 голосов
/ 10 февраля 2011

У меня есть следующий код в моем global.ascx, и когда я нажимаю кнопку сгенерировать ошибку, код запускается, но, похоже, происходит сбой при ошибке вставки в БД.

Я хочу, чтобы ошибка была сохраненав БД и перенаправить на default.aspx.

довольно стандартный материал.

ошибка, которую я получаю: exe.Message = "Неверный синтаксис рядом с 'System'."(похоже на что-то с объектами SQL, используемыми в global.asx)

 void Application_Error(object sender, EventArgs e) 
    { 
        // Code that runs when an unhandled error occurs
        Exception ex = Server.GetLastError();

        StringBuilder theBody = new StringBuilder();        
        theBody.Append("Error Message: " + ex.ToString() + "\n");


        Server.ClearError();

        try
    {
        string sSQL = "INSERT INTO PMISwebErr VALUES ('" + theBody.ToString() + "', GETDATE())";

        using (System.Data.SqlClient.SqlConnection con = STAR.Global.GetConnection())
        {
            System.Data.SqlClient.SqlCommand cmd = new System.Data.SqlClient.SqlCommand(sSQL, con);
            cmd.CommandType = System.Data.CommandType.Text;
            cmd.ExecuteScalar();
        }


        Response.Redirect("~/default.aspx?Err=sysError");
    }
    catch (Exception exe) {
        Response.Redirect("~/default.aspx?Err="+ exe.Message.ToString() );
    }

    }

проблема заключается в добавлении сообщения об ошибке.у него есть одиночная кавычка, которая нарушает SQL.Код получает это значение в результате в этой строке:

theBody.Append("Error Message: " + ex.ToString() + "\n");

sSQL = "INSERT INTO PMISwebErr VALUES ('URL: http://localhost:14854/PMIS/Default.aspx\nReferer: http://localhost:14854/PMIS/Default.aspx\nIP: 127.0.0.1\ nError Message: System.Web.HttpUnhandledException: Исключение типа 'System.Web.HttpUnhandledException' было thr ...

это фактическое значение из моих быстрых часов, странно видеть ...в конце.

Ответы [ 3 ]

3 голосов
/ 10 февраля 2011

Вы действительно должны использовать параметризованную вставку.Я уверен, что есть проблемы с кавычками в строке, которую вы пытаетесь вставить, и это вызывает исключение.

Вот пример:

http://www.4guysfromrolla.com/webtech/092601-1.shtml

0 голосов
/ 10 февраля 2011

Как и ожидалось @ ScottE , у вас проблема с кавычками.Строка окружена одинарными кавычками, но внутри находится текст Exception of type 'System.Web.., который добавляет кавычку в месте, где вы не хотите этого.

Решение?Используйте параметры и позвольте драйверу обработать эти кавычки.

0 голосов
/ 10 февраля 2011

Это действительно должен быть ExecuteNonQuery() звонок.ExecuteScalar() предназначен больше для выбора атомарных значений из агрегатов.

http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlcommand.executenonquery.aspx

http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlcommand.executescalar.aspx

...