Добавление данных из хранимой процедуры на диаграмму

#c# #asp.net #sql-server

#c# #asp.net #sql-сервер

Вопрос:

Я пытаюсь построить линейную диаграмму aspx. У меня есть данные из хранимой процедуры, которые я хочу отобразить на диаграмме.

Как вы можете видеть ниже, я получаю данные из хранимой процедуры, которая называется «ConsoleSales», и я помещаю эти данные в набор данных. Я также создал класс с именем months для оси X диаграммы. Я хочу показать месяцы с января по декабрь, и, конечно, для моей оси Y я хочу показать данные моей хранимой процедуры. Как я могу заставить это работать? Я не могу найти ничего полезного в Google, какие-либо предложения?

Вот мой код разметки:

  <asp:Chart ID="Chart1" runat="server" Height="296px" Width="500px" BorderDashStyle="Solid"
        BackSecondaryColor="White" BackGradientStyle="TopBottom" BorderWidth="2px" BackColor="211, 223, 240"
        BorderColor="#1A3B69">
        <Titles>
            <asp:Title Text="Title of the Graph comes here" />
        </Titles>
        <Series>
            <asp:Series Name="Series1" BorderColor="180, 26, 59, 105" ChartType="Line">
            </asp:Series>
        </Series>
        <ChartAreas>
            <asp:ChartArea Name="ChartArea1" BorderColor="64, 64, 64, 64" BorderDashStyle="Solid"
                BackSecondaryColor="White" BackColor="64, 165, 191, 228" ShadowColor="Transparent"
                BackGradientStyle="TopBottom">
                <Area3DStyle Rotation="10" Perspective="10" Inclination="15" IsRightAngleAxes="False"
                    WallWidth="0" IsClustered="False"></Area3DStyle>
                <AxisY LineColor="64, 64, 64, 64">
                    <LabelStyle Font="Trebuchet MS, 8.25pt, style=Bold" />
                    <MajorGrid LineColor="64, 64, 64, 64" />
                </AxisY>
                <AxisX LineColor="64, 64, 64, 64">
                    <LabelStyle Font="Trebuchet MS, 8.25pt, style=Bold" />
                    <MajorGrid LineColor="64, 64, 64, 64" />
                </AxisX>
            </asp:ChartArea>
        </ChartAreas>
    </asp:Chart>
 

Вот мой CS-код:

      public class Months
    {
        public string MonthsOfTheYear { get; set; }
    }


protected void Page_Load(object sender, EventArgs e)
    {

        var monthsList = new List<Months>()
        {
            new Months() {MonthsOfTheYear = "Jan"},
            new Months() {MonthsOfTheYear = "Feb"},
            new Months() {MonthsOfTheYear = "March"},
            new Months() {MonthsOfTheYear = "April"},
            new Months() {MonthsOfTheYear = "May"},
            new Months() {MonthsOfTheYear = "Jun"},
            new Months() {MonthsOfTheYear = "Jul"},
            new Months() {MonthsOfTheYear = "Aug"},
            new Months() {MonthsOfTheYear = "Sep"},
            new Months() {MonthsOfTheYear = "Oct"},
            new Months() {MonthsOfTheYear = "Nov"},
            new Months() {MonthsOfTheYear = "Dec"}
        };


        DateTime startDate = DateTime.Now;
        DateTime endDate = DateTime.Now.AddYears(-1);

        string cS = ConfigurationManager.ConnectionStrings["connectionString"].ConnectionString;
        using (SqlConnection con = new SqlConnection(cS))
        {
            SqlDataAdapter da = new SqlDataAdapter("[ConsoleSales]", con);
            da.SelectCommand.CommandType = CommandType.StoredProcedure;
            da.SelectCommand.Parameters.Add(new SqlParameter("@StartDate", startDate));
            da.SelectCommand.Parameters.Add(new SqlParameter("@EndDate", endDate));
            DataSet ds = new DataSet();
            da.Fill(ds);


            Chart1.DataSource = ds.Tables[0];

            Chart1.Series["Series1"].YValueMembers = "TimeOfSales";
            Chart1.Series["Series1"].XValueMember = monthsList.ToString() ;

       }
   }
 

Ответ №1:

Пожалуйста, попробуйте следующее.

 SqlConnection connection = new SqlConnection("......");

SqlCommand command = new SqlCommand();
command.Connection = connection;
command.CommandType = CommandType.StoredProcedure;
command.CommandText = "<<<Enter your stored Procedure Name>>>";

// create sql parameter if your procedure expects any input
SqlParameter param1 = new SqlParameter("@spParam1",SqlDbType.NVarChar);

// add parameters to parameters collection
command.Parameters.Add(param1);

// you can define more parameters based on your Stored Procedure's design

// set this parameter to a value we would like to set
command.Parameters["@spParam1"].Value = "<<Input goes here...>>"; 

// open connection
command.Connection.Open();

// populate data reader with return data result set 
// and close connection after populating data set
SqlDataReader reader = command.ExecuteReader(CommandBehavior.CloseConnection);

// assign data source to Chart
chart1.DataSource = reader;

// Set series data source to stored procedures returned data set's columns
chart1.Series[0].ValueMemberX = "ProductName";
chart1.Series[0].ValueMembersY = "TotalPurchase";

// data bind chart
chart1.DataBind(); 
 

Комментарии:

1. Добро пожаловать в StackOverflow: если вы публикуете примеры кода, XML или данных, пожалуйста , выделите эти строки в текстовом редакторе и нажмите на кнопку «примеры кода» ( { } ) на панели инструментов редактора, чтобы красиво оформить и выделить синтаксис!

Ответ №2:

это работает!

 protected void Chart1_Load(object sender, EventArgs e)
{


    SqlCommand cmd = new SqlCommand("sp_chart", Cn); // Definir cmd
    cmd.CommandType = CommandType.StoredProcedure;
    cmd.Parameters.Add("@id_district", SqlDbType.Int);
    cmd.Parameters["@id_district"].Value = 1;

    Cn.Open();

    SqlDataReader reader = cmd.ExecuteReader(CommandBehavior.CloseConnection);
    Graficas.DataSource = reader;

    Graficas.Series[0].XValueMember = "name";
    Graficas.Series[0].YValueMembers = "vote";

    Graficas.DataBind();

    reader.Close();
    Cn.Close();


}