如何处理从SQL抛出到controller.cs的错误消息

时间:2014-02-27 08:25:56

标签: c# sql-server error-handling

我想检查是否存在重复的用户名。

在我的AddNewUser存储过程

我使用了以下代码

DECALRE @error nvarchar(500)
IF EXISTS(SELECT EMAIL FROM [USERSTABLE] WHERE Email= @Email)  
set @error = 'User already exists with email address '+@Email
RAISERROR (@error,16,1);    

现在我想在UserNameController.cs

上捕获此错误消息
try
{
 using (SqlConnection connection = new SqlConnection(connectionString))
                {
                    connection.Open();
                    using (SqlCommand cmd = new SqlCommand("sp_CreateNewUser", connection))
                    {
                        cmd.CommandType = CommandType.StoredProcedure;

            //some parameters
            cmd.ExecuteScalar();
}

catch(Exception ex)
{throw ex;}

现在在ex我收到了错误消息。 但是如何在View上显示呢? (.cshtml)?

3 个答案:

答案 0 :(得分:1)

如何将'ex'存储在ViewBag / TempData中,然后在View中显示。

P:请原谅我,如果我错了,我对MVC知之甚少。

答案 1 :(得分:0)

其中一种可能的解决方案是在web.config中启用自定义错误:

<system.web>
    <customErrors mode="On" />
</system.web>

完成后,在Views / Shared:

中创建一个名为Error.cshtml的新视图
@model System.Web.Mvc.HandleErrorInfo

<!DOCTYPE html>
<html>
<head>
    <title>Error</title>
</head>
<body>
    <h2>
        Sorry, an error occurred while processing your request.
    </h2>
    <p>Controller Name: @Model.ControllerName</p>
    <p>Action Name : @Model.ActionName</p>
    <p>Message: @Model.Exception.Message</p>
</body>
</html>
</html>

现在,当抛出异常时,您将在此自定义视图中看到异常消息。无需手动捕获。

答案 2 :(得分:0)

View上,您需要创建控件以显示有关错误的消息 - 通常它将是干净的或不可见的。如果您收到错误 - 请在此控件中显示错误消息并使其可见。

在此处更改您的代码

catch(Exception ex)
{/*there must be code to show message*/}