sql server语言 - 将存储过程查询结果从JSonResult传递给Ajax



大家好!我试图在页面上的文本框中显示存储过程查询的结果。这个存储过程只返回一个结果,即每日销售额。我试图通过JSonresult来做这个,这样我就可以把它传递给视图页面中的ajax。但我似乎无法通过考试。

我有一个名为ORDER的表,它有一个ORDER_DATE & NET_AMOUNT 列。我需要显示当天net_amount的总和。以下是我的查询:

SELECT SUM(NET_AMOUNT) AS DAILY_SALES
FROM [ORDER]
WHERE ORDER_DATE = GETDATE()

然后在我的控制器中使用以下方法调用这个存储过程:

        public JsonResult GetSalesToday()
        {
            DataTable dtTable = new DataTable();
            List<string> lstSales = new List<string>();
            string strQuery = "SP_DAILY_SALES";
            SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["DefaultConnection"].ToString());
            SqlCommand cmd = new SqlCommand(strQuery, con);
            cmd.CommandType = CommandType.StoredProcedure;
            SqlDataAdapter da = new SqlDataAdapter(cmd);
            da.Fill(dtTable);
            foreach (DataRow row in dtTable.Rows)
            {
                lstSales.Add(row["DAILY_SALES"].ToString());
            }
            var DailySales = new
            {
                SALESTODAY = lstSales
            };
            return Json(DailySales, JsonRequestBehavior.AllowGet);
        }		

,然后调用它到my视图中:

  $.ajax(
                       {
                           datatype: "json",
                           type: "POST",
                           url: "/Sales/GetSalesToday",
                           data: JSON,
                           success: function (data) {
                               DailySales(data);
                           },
                           error: function () { alert("Error"); }
                       });

我如何调用它到我的文本框?

 <div class="form-group">
                                @Html.LabelFor("DailySales", "Sales", htmlAttributes: new { @class = "col-xs-4 col-sm-offset-1 col-sm-4" })
                                <div class="col-lg-6 col-lg-6 col-md-6 col-md-6 col-sm-6 col-sm-6 col-xs-6 col-xs-6">
                                    @Html.TextBoxFor("DailySales", new { @class = "form-control" })
                                    @Html.ValidationMessageFor("DailySales", "", new { @class = "text-danger" })
                                </div>
                            </div>

我哪里错了?有人能帮我一下吗?提前感谢!

如果您想要求和,只需为其保留一个变量并返回该变量。

decimal total = 0.0M;
foreach (DataRow row in dtTable.Rows)
{
   total  += Convert.ToInt32(row["DAILY_SALES"]);
}
return Json(total,JsonRequestBehaviour.AllowGet);

和在你的ajax调用的成功回调,读取值并分配给文本框使用jQuery val()方法

 success: function (data){
                           $("#DailySales").val(data);
                         },

如果存储过程返回单个标量值,则不需要遍历数据行!您也可以考虑使用ExecuteScalar方法。此外,我更改了您的方法,使用using,以便连接将正确关闭。

假设您的存储过程返回单个十进制值。

public JsonResult GetSalesToday()
{
    var strQuery = "SP_DAILY_SALES";
    decimal total = 0.0M;
    var conStr = ConfigurationManager.ConnectionStrings["DefaultConnection"].ToString();
    using (var con = new SqlConnection(conStr)))
    {
        using (var cmd = new SqlCommand(strQuery, con))
        {
            con.Open();
            cmd.CommandType = CommandType.StoredProcedure;
            total = (decimal)cmd.ExecuteScalar();
        }
    }
    return Json(total, JsonRequestBehavior.AllowGet);
}

另外,我看到你的视图中有一些错误的代码。TextBoxForLabelFor辅助方法不接受字符串作为参数。您需要使用Html.TextBoxHtml.Label方法

@Html.Label("DailySales", "Sales",new { @class = "col-xs-4 col-sm-offset-1 col-sm-4" })
@Html.TextBox("DailySales", new { @class = "form-control" })
`decimal total = 0.0;
foreach (DataRow row in dtTable.Rows)
{
   lstSales.Add(row["DAILY_SALES"].ToString());
   total = total + Convert.ToInt32(row["DAILY_SALES"]);
}
return Json(total,JsonRequestBehaviour.AllowGet);`

最新更新