Member 12605293 Ответов: 1

Как передать идентификатор в хранимую процедуру, которая исходит из детализации


Привет , я использую диаграмму и делаю панель для детализации и отображения значений, я хочу знать ,как передать идентификатор в хранимой процедуре, которая исходит из детализации Примечание: пожалуйста, посмотрите на код в "elseif"
Вот мой код

Что я уже пробовал:

мой код
SeriesCollection SC = new SeriesCollection();
DataEngine de = new DataEngine();
        


        de.DataFields = "xAxis=Empname,yAxis=TotalLeave,ToolTip=LeaveType";
        Chart.XAxis.Label.Text = "Department/Employees";
        Chart.TempDirectory = "temp";
        Chart.Debug = true;
        Chart.JS.Enabled = true; 
        de.ConnectionString = conString;
        if (Request.QueryString["ddLevel"] == null )
        {
            Chart.Title = "ABSENTEE REPORT";
            txtstart.Visible = true;
            txtend.Visible = true;
            Button3.Visible = true;
            Button2.Visible = true;
            de.StoredProcedure = "AbsenteeReport2";
            de.ConnectionString = conString;
            de.ParameterCollection.Clear();
            de.AddParameter("@Startdate", txtstart.Text, FieldType.Date);
            de.AddParameter("@Enddate", txtend.Text, FieldType.Date);
            de.DataFields = "Xaxis=DeptName,Yaxis=LeaveCount,url=Deptname";
            Chart.Series.ConnectionString = conString;
            Chart.Series.StoredProcedure = "AbsenteeReport2";
            Chart.Series.ParameterCollection.Clear();
            Chart.Series.AddParameter("@Startdate", txtstart.Text, FieldType.Date);
            Chart.Series.AddParameter("@Enddate", txtend.Text, FieldType.Date);
            Chart.DataBind();
            Chart.Visible = true;
            Chart.SeriesCollection.Add(SC);
            Chart.Visible = true;
            SC = de.GetSeries();


            foreach (Series s in SC)
            {
                foreach (Element el in s.Elements)
                {
                    el.URL = "?id=" + el.URL + "&ddLevel=2";
                }
            }
            Chart.SeriesCollection.Add(SC);
}

        else if (Request.QueryString["ddLevel"] == "2")
        {
            Chart.Title = "ABSENTEE REPORT";
           // de.SqlStatement = "Select Empname,TotalLeave,LeaveType From Charting32 Where Deptname = '" + Request.QueryString["id"] + "'";
            de.StoredProcedure = "AbsenteeReport1 Where Deptname = '" + Request.QueryString["id"] + "'";
            de.ConnectionString = conString;
            de.ParameterCollection.Clear();
            de.AddParameter("@Startdate", txtstart.Text, FieldType.Date);
            de.AddParameter("@Enddate", txtend.Text, FieldType.Date);
            de.DataFields = "xAxis=Empname,yAxis=TotalLeave,ToolTip=LeaveType";
            SC = de.GetSeries();
            Chart.DefaultElement.ToolTip = "<block>Type: <block hAlign='left'>%yvalue<row>";
            txtstart.Visible = false;
            txtend.Visible = false;
            Button3.Visible = false;
            Button2.Visible = false;
            Chart.Height = 550;

            foreach (Series s in SC)
            {
                foreach (Element el in s.Elements)
                {
                    el.ToolTip = "<block>LeaveType:<block>".Replace(":", System.Environment.NewLine) + el.ToolTip.Replace(",", System.Environment.NewLine);     
                } 
            }
            Chart.SeriesCollection.Add(SC);
        }




Моя Хранимая Процедура
ALTER procedure [dbo].[AbsenteeReport1](@Startdate DateTime,@Enddate Datetime)
as
Begin
With CTE as (
    SELECT   EmployeeDetails.Empname,
             DepartmentDetails.Deptname ,
             LeaveApplication.LeaveType,
             Sum(LeaveApplication.NoOfDays) As TotalLeave 
    FROM DepartmentDetails 
    Inner JOIN EmployeeDetails on EmployeeDetails.DeptID = DepartmentDetails.DeptID
    INNER JOIN LeaveApplication On EmployeeDetails.EmpID = LeaveApplication.EmpID
    WHERE     LeaveApplication.LeaveFromDate >=@Startdate 
          AND LeaveApplication.LeaveFromDate <=@Enddate 
          AND  EmployeeDetails.Status=0 
          AND  LeaveApplication.leavetype not in ('Forgot Access Card','Permission','Work from Home',
                                          'Holiday Allowance/Weekend Allowance','On Duty','Night Shift Allowance') 
          AND LeaveApplication.LeaveStatus<>'Rejected'
    GROUP BY     LeaveApplication.EmpID ,
             DepartmentDetails.Deptname,
             EmployeeDetails.Empname,
             LeaveApplication.LeaveType
         )
select EmpName, Deptname, stuff ((
    select ',' + LeaveType+'-'+ cast(TotalLeave as varchar(5)) from CTE where EmpName = t.EmpName and Deptname = t.Deptname for xml path('')
    ),1,1,'') as LeaveType,
    Sum(TotalLeave) as TotalLeave
from CTE t
group by EmpName, Deptname

End

1 Ответов

Рейтинг:
7

CHill60

Во-первых, этот бит ...

 Chart.Title = "ABSENTEE REPORT";
// de.SqlStatement = "Select Empname,TotalLeave,LeaveType From Charting32 Where Deptname = '" + Request.QueryString["id"] + "'";
 de.StoredProcedure = "AbsenteeReport1 Where Deptname = '" + Request.QueryString["id"] + "'";
 de.ConnectionString = conString;
 de.ParameterCollection.Clear();
 de.AddParameter("@Startdate", txtstart.Text, FieldType.Date);
 de.AddParameter("@Enddate", txtend.Text, FieldType.Date);
Это не то, как вы называете хранимую процедуру - она должна быть чем-то вроде (непроверенной!):
Chart.Title = "ABSENTEE REPORT";
de.StoredProcedure = "AbsenteeReport1";
de.ConnectionString = conString;
de.ParameterCollection.Clear();
de.AddParameter("@Id", Request.QueryString["id"], FieldType.Text);
de.AddParameter("@Startdate", txtstart.Text, FieldType.Date);
de.AddParameter("@Enddate", txtend.Text, FieldType.Date);
И вам нужно будет изменить подпись вашей хранимой процедуры, чтобы получить дополнительный параметр (или, если это не новая хранимая процедура, напишите на ее основе новую, которая принимает дополнительный параметр)
ALTER procedure [dbo].[AbsenteeReport1](@id int, @Startdate DateTime,@Enddate Datetime)
as
...
Внутри тела SP вам придется либо использовать
WHERE EmployeeDetails.DeptID  = @id
или включить фильтр в ON пункт
AND DepartmentDetails.DeptID = @id