Asp.net 为什么我的global.asax错误处理程序不工作?

Asp.net 为什么我的global.asax错误处理程序不工作?,asp.net,error-handling,global-asax,Asp.net,Error Handling,Global Asax,我的global.ascx中有以下代码,当我单击generate error按钮时,代码会运行,但在数据库中插入错误时似乎失败了 我希望将错误保存到DB并重定向到default.aspx 相当标准的东西 我得到的错误是:exe.Message=“靠近“系统”的语法不正确。” (看起来像是global.asx中使用的SQL对象) 问题在于添加了错误消息。它有一个单引号,打破了SQL。代码在此行获得此值作为结果: theBody.Append("Error Message: " + ex.ToStr

我的global.ascx中有以下代码,当我单击generate error按钮时,代码会运行,但在数据库中插入错误时似乎失败了

我希望将错误保存到DB并重定向到default.aspx

相当标准的东西

我得到的错误是:exe.Message=“靠近“系统”的语法不正确。” (看起来像是global.asx中使用的SQL对象)

问题在于添加了错误消息。它有一个单引号,打破了SQL。代码在此行获得此值作为结果:

theBody.Append("Error Message: " + ex.ToString() + "\n");
sSQL=“插入到PMISWebER值中 (“URL: \推荐人: \nIP: 127.0.0.1\n错误消息:System.Web.HttpUnhandledException: 类型异常 'System.Web.HttpUnhandledException' 是不是


这是我的quick watch中的实际值,奇怪的是在结尾看到了…你真的应该使用参数化的插入。我确信你尝试插入的字符串有引号问题,这导致了异常

以下是一个例子:


您确实应该使用参数化插入。我确信您尝试插入的字符串存在引号问题,这导致了异常

以下是一个例子:


这实际上应该是一个
ExecuteNonQuery()
调用。
ExecuteScalar()
主要用于从聚合中选择原子值


这实际上应该是一个
ExecuteNonQuery()
调用。
ExecuteScalar()
主要用于从聚合中选择原子值

正如所料,引号有问题。字符串用单引号括起来,但里面是“System.Web..类型的文本
例外,它在不需要引号的地方添加了引号

解决方案?使用参数并让驱动程序处理这些引号。

正如预期的那样,引号有问题。字符串由单引号括起来,但里面是“System.Web..
类型的文本
例外,它在您不需要引号的地方添加了引号


解决方案?使用参数并让驱动程序处理这些引号。

您的文件实际上是名为
global.ascx
,还是名为
global.asax
?如果数据库出现错误怎么办?该sql字符串是什么(是否有任何未替换的引号?),是否有任何错误(删除重定向时是否看到新错误?)您的文件实际上是名为
global.ascx
,还是名为
global.asax
?如果数据库中出现错误,该怎么办?该sql字符串是什么(是否有未替换的引号?)+1-他的构建中的某个变量可能会在字符串中注入单引号,从而破坏执行,这不是不可行的。你不仅应该在这里使用参数化SQL,而且永远不要将SQL连接为这样的字符串。出于安全原因,这是一个真正的不可行:+1-他的构建中的某个变量可能会在字符串中插入单引号会破坏执行。在这里不仅应该使用参数化SQL,而且永远不要将SQL连接为这样的字符串。出于安全原因,这是一个真正的禁忌:
theBody.Append("Error Message: " + ex.ToString() + "\n");