基于存储过程返回值的错误

时间:2013-03-13 16:32:12

标签: c# javascript asp.net sql-server

我有一个ASP.NET C#网页,在更新模式下有一个DetailsView。用户键入内容并按下按钮以更新数据库上的该记录。

我想添加一个运行快速存储过程的JavaScript并获取返回值。如果返回值小于1,那么我希望我的DetailsView更新继续。如果该值大于1,那么我想停止更新并显示错误消息:'ERROR:大于1'。

与往常一样,我感谢任何帮助。

3 个答案:

答案 0 :(得分:1)

您可以调用Web服务或页面方法来执行数据库查询,并在Ajax的帮助下将结果返回给客户端。

在这里,您可以找到与此处相同的实施答案:Run Stored Procedure with ajax

答案 1 :(得分:1)

您可以使用Ajax and Jquery来实现此目的。基本上你会在后面的代码中调用一个方法来运行存储过程并返回成功或错误消息

Jquery是:

$("input[id$='ButtonName']").click(function (e) {

                    $.ajax({
                        type: "POST",
                        url: "PageName.aspx/FunctionName",
                        contentType: "application/json; charset=utf-8",
                        dataType: "json",

                        success: function (msg) {
                            if (msg.d == 'Success') {
                                //do something
                            }
                            else if (msg.d == 'ERROR') {
                               //do something
                            }
                        }

                    });

                e.preventDefault();
            });

和代码隐藏方法将是:

[System.Web.Services.WebMethod]
public static string FunctionName()
{
  //run store proc and return success or error 
}

答案 2 :(得分:0)

我最终以迂回的方式解决了这个问题。这不是我理想的解决方案,但它的工作原理相同。

我最终把这段代码放在我的Page_Load中。它从QueryString中获取用户代码,然后使用该用户代码运行SQL查询以获取单个值。如果该值大于1,则页面将重定向到错误页面。

同样,不理想,但它有助于达到目的。

protected void Page_Load(object sender, EventArgs e)
    {
        //Runs query to determine if returnValue is greater then 1 then redirects if true 
        SqlConnection sqlConnection1 = new SqlConnection("ConnectionString");
        SqlCommand cmd = new SqlCommand();
        cmd.CommandText = "SELECT COUNT(UID) FROM Table WHERE (USER = @USER)";
        cmd.CommandType = CommandType.Text;
        SqlParameter UserID = new SqlParameter("@USER", Request.QueryString["usr"]);
        UserID.Direction = ParameterDirection.Input;
        cmd.Parameters.Add(UserID);
        cmd.Connection = sqlConnection1;

        sqlConnection1.Open();
        int returnValue;
        returnValue = Convert.ToInt32(cmd.ExecuteScalar());
        sqlConnection1.Close();

        if (returnValue > 0)
        {
            Response.Redirect("morethanone?usr=" + Request.QueryString["usr"]);
        }
    }