这是针对学校项目的。我有一个母版页和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;
答案 0 :(得分:0)
对不起,您还不能输入评论
在此代码中:
if (Session.Contents["ProductId"] != null)
{
GetProblemsByProduct();
}
if (Session.Contents["Branch"] != null)
{
GetProblemsByClient();
}
您是否检查过ID /名称/标识符已发送到功能?通常,参数被输入到()内的函数中。
同样,我没有要求评论的代表,所以我将只编辑此帖子以在必要时回复。
响应从这里开始
嗯...我相信可以打开一个设置,使您能够“渗透”到函数调用中,但是您应该能够在函数内部放置断点,也许在执行DB调用的行上?看看您是从数据库中获取数据还是在填充之前发生错误,如果正在填充,则可以按照从那里开始的流程进行操作,直到遇到错误为止。