访问第二个内容页面并为指定的存储过程调用该函数

时间:2018-11-11 18:26:47

标签: c# asp.net stored-procedures

这是针对学校项目的。我有一个母版页和2个内容页。

我的第一个内容页面有4个按钮。每个按钮对应一个将用于访问数据库的存储过程。我的第二个内容页面将基于单击的按钮显示数据中的数据。我不知道该为会话变量使用哪种属性或数据来实现它。

第一个内容页面按钮“按ID获取问题”和“按客户获取问题”

   protected void btnProbByProduct_Click(object sender, EventArgs e)
    {
        Session.Contents["ProductID"] = strProduct;
        Response.Redirect("./ReportDisplay.aspx");
    }


   protected void btnProbByClient_Click(object sender, EventArgs e)
    {
        Session.Contents["Branch"] = strTech;
        Response.Redirect("./ReportDisplay.aspx");
    }

第二个内容页面在Page_Load中具有以下代码,根据所单击的按钮,它应调用与该按钮关联的存储过程。

  if (Session.Contents["ProductId"] != null)
        {
            GetProblemsByProduct();
        }

        if (Session.Contents["Branch"] != null)
        {
            GetProblemsByClient();
        }

下面是我上面的功能。

  //******
    private void GetProblemsByProduct()
    {
        lblError.Text = "";
        dsData = clsDatabase.GetProblemsByProduct();
        if (dsData == null)
        {
            lblError.Text = "Error retrieving Ticket list1";
        }
        else if (dsData.Tables.Count < 1)
        {
            lblError.Text = "Error retrieving Ticket list2";
            dsData.Dispose();
        }
        else
        {
            gvProb.DataSource = dsData.Tables[0];
            gvProb.DataBind();

            dsData.Dispose();
        }

    }

//****
    private void GetProblemsByClient()
    {
        lblError.Text = "";
        dsData = clsDatabase.GetProblemsByClient();
        if (dsData == null)
        {
            lblError.Text = "Error retrieving Ticket list1";
        }
        else if (dsData.Tables.Count < 1)
        {
            lblError.Text = "Error retrieving Ticket list2";
            dsData.Dispose();
        }
        else
        {
            gvProb.DataSource = dsData.Tables[0];
            gvProb.DataBind();

            dsData.Dispose();
        }

    }

下面是存储过程。

CREATE PROCEDURE [dbo].[uspProblemsByProduct]
 AS
--*********************************************************************
 --** Get costs by Product
 --*********************************************************************
 SET NOCOUNT ON;
 DECLARE @ErrCode int;

 SELECT COUNT(*) AS NumberOfProblems,
   CONVERT(varchar,pr.ProductId) AS ProductId,
   RTRIM(pr.ProductDesc) AS Product, 
   SUM(ISNull((r.Hours * r.CostHours),0) + ISNULL((r.Mileage * 
   r.CostMiles),0) + 
       ISNULL(r.Supplies,0) + ISNULL(r.Misc,0)) AS TotalExpense,
   AVG(ISNull((r.Hours * r.CostHours),0) + ISNULL((r.Mileage * 
  r.CostMiles),0) + 
       ISNULL(r.Supplies,0) + ISNULL(r.Misc,0)) AS AverageExpense
  FROM Problems p
 INNER JOIN Resolutions r ON r.TicketID = p.TicketID AND r.IncidentNo = 
  p.IncidentNo 
  INNER JOIN Products pr ON pr.ProductId = p.ProductId
 GROUP BY pr.ProductId, pr.ProductDesc
 ORDER BY 3;

 SET @ErrCode = @@ERROR;
  SET NOCOUNT OFF;
 RETURN @ErrCode;


CREATE PROCEDURE [dbo].[uspProblemsByClient]
 AS
--*********************************************************************
--** Get costs by client
--*********************************************************************
SET NOCOUNT ON;
DECLARE @ErrCode int;

SELECT COUNT(*) AS NumberOfProblems,
   c.Institution, 
   c.Branch,
   SUM(ISNull((r.Hours * r.CostHours),0) + ISNULL((r.Mileage * 
r.CostMiles),0) + 
       ISNULL(r.Supplies,0) + ISNULL(r.Misc,0)) AS TotalExpense,
   AVG(ISNull((r.Hours * r.CostHours),0) + ISNULL((r.Mileage * 
r.CostMiles),0) + 
       ISNULL(r.Supplies,0) + ISNULL(r.Misc,0)) AS AverageExpense
FROM Problems p
INNER JOIN Resolutions r ON r.TicketID = p.TicketID AND r.IncidentNo = 
p.IncidentNo 
INNER JOIN ServiceEvents se ON se.TicketID = r.TicketID
INNER JOIN Clients c ON c.ClientID = se.ClientID
GROUP BY c.Institution, c.Branch 
ORDER BY 2,3;

SET @ErrCode = @@ERROR;
SET NOCOUNT OFF;
RETURN @ErrCode;

1 个答案:

答案 0 :(得分:0)

  

对不起,您还不能输入评论

     

在此代码中:

if (Session.Contents["ProductId"] != null)
        {
            GetProblemsByProduct();
        }

        if (Session.Contents["Branch"] != null)
        {
            GetProblemsByClient();
        }

您是否检查过ID /名称/标识符已发送到功能?通常,参数被输入到()内的函数中。

  

同样,我没有要求评论的代表,所以我将只编辑此帖子以在必要时回复。

     
    

响应从这里开始
    嗯...我相信可以打开一个设置,使您能够“渗透”到函数调用中,但是您应该能够在函数内部放置断点,也许在执行DB调用的行上?看看您是从数据库中获取数据还是在填充之前发生错误,如果正在填充,则可以按照从那里开始的流程进行操作,直到遇到错误为止。