【问题标题】:Sql DataReader and Multiple Object VariablesSql DataReader 和多个对象变量
【发布时间】:2015-08-26 22:26:40
【问题描述】:

我整天都在试图找出这个问题,但似乎真的无法理解。我有一个函数,我正在调用一个 SQL 存储过程,使用 SQL DataReader 我正在返回一个表。现在该表有 8 列,但我每行只使用 5 列。我创建了一个名为chartInfo 的对象[],并希望用第一行中的五个值填充对象并遍历行并继续遍历填充对象的行,直到我到达末尾。使用下面的代码,它适用于第一次交互,它获取值,将它们放入对象数组中,我可以在我的图表中使用它。

SqlDataReader reader = cmd.ExecuteReader();

Object[] chartInfo = new Object[5];
Object[] chartInfo1 = new Object[4];

if (reader.HasRows)
{
    if (reader.Read())
    {
        chartInfo[0] = Convert.ToDouble(reader.GetValue(1));                   
        chartInfo[1] = Convert.ToDouble(reader.GetValue(2));                   
        chartInfo[2] = Convert.ToDouble(reader.GetValue(3));
        chartInfo[3] = Convert.ToDouble(reader.GetValue(4));
        chartInfo[4] = Convert.ToDouble(reader.GetValue(5));

        //chartInfo1[0] = 500;                   
        //chartInfo1[1] = 20000;                   
        //chartInfo1[2] = 45125;
        //chartInfo1[3] = 68954;
    }
}  
else
{
    Console.WriteLine("No rows found.");
}

reader.Close();

// Declare the HighCharts Object
DotNet.Highcharts.Highcharts charts = new DotNet.Highcharts.Highcharts("chart")
    .InitChart(new Chart
    {
        // Inital Loading of the chart, default is line
        DefaultSeriesType = ChartTypes.Line
    })
    .SetPlotOptions(new PlotOptions
    {
        Pie = new PlotOptionsPie
        {
            DataLabels = new PlotOptionsPieDataLabels
            {
                Enabled = true
            }
        }
    })
    .SetTitle(new Title
    {
        Text = "Overall Sales From Previous Years",
        X = -20
    })
    .SetSubtitle(new Subtitle
    {
        Text = "Source: Sales Database",
        X = -20
    })
    .SetXAxis(new XAxis
    {
        Categories = new[] { "2010", "2011", "2012", "2013", "2014" }
    })
    .SetSeries(new[]
    {
        new Series{ Name = "Carbide(total specials)", Data = new Data(chartInfo), Color = ColorTranslator.FromHtml("#FDB813") },
        new Series{ Name = "Test", Data = new Data(chartInfo1) }
    })
    .SetCredits(new Credits
    {
        Enabled = false
    });

ReportChart.Text = charts.ToHtmlString();

所以我的问题是我是否需要为五行创建 5 个对象,或者当行数未知时我将如何使用当前对象数组来创建填充,我是否需要提供一个 for 循环来计数,我对此很困惑。我希望我提供了足够的信息。

谢谢

【问题讨论】:

    标签: asp.net arrays object highcharts sqldatareader


    【解决方案1】:

    所以看起来你读取的每一行都是 5 个双精度数,你需要将它们存储在一个数组中。然后您需要保留所有此类行的列表,以便稍后将它们全部传递给图表。

    要存储它们,您可以为每一行定义一个专用类,即假设每一列都具有一定的商业意义。但是,如果它只是一个值,比如一个数据点,只需使用双精度数组:

    列表 chartInfo = new List();

    if (reader.HasRows)
    {
        if (reader.Read())
        {
            double[] rowData = new double[5];
            rowData[0] = Convert.ToDouble(reader.GetValue(1));
            ...
            rowData[4] = Convert.ToDouble(reader.GetValue(5));
        }
    }
    

    ...

    现在要使用它们,使用chartInfo 创建一个Series 对象数组。这可以通过 for/foreach 循环来完成:

    Series[] series = new Series[chartInfo.Length];
    for (int i=0; i< chartInfo.Length; i++)
    {
        series[i] = new Series { Data = chartInfo[i] };
    }
    

    或使用 LINQ:

    Series[] series = chartInfo.Select(c => new Series {Data = c}).ToArray();
    

    这将帮助您处理任意数量的行。但是请记住,您仍然需要弄清楚一些事情,例如如何为不同的行显示不同的文本和不同的颜色。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-08-25
      • 1970-01-01
      • 1970-01-01
      • 2012-12-29
      • 1970-01-01
      • 2015-07-19
      • 1970-01-01
      相关资源
      最近更新 更多