【发布时间】:2019-07-14 17:44:22
【问题描述】:
我有一个 SQL 数据库,其中存储了一些我想绘制图表的数据。问题是,我继承了这个数据库,他们将日期时间值存储为 Ticks。当我将图表数据源设置为此表时,它似乎不理解刻度。
如何让我的图表将刻度转换回我的图表可以理解的 DateTime 格式?
我的 SQL 查询和代码:
static public DataTable get_I1(RunningTests rt)
{
DataTable dt = new DataTable();
using (SqlConnection cs = new SqlConnection(connString))
{
string query = string.Format("SELECT Time_Stamp, I1 FROM Test WHERE Unit_ID = '{0}' AND Time_Stamp >= '{1}' AND Time_Stamp <= '{2}'", rt.Unit_ID, rt.StartTime.Ticks, rt.StopTime.Ticks);
Console.WriteLine(query);
SqlCommand cmd = new SqlCommand(query, cs);
using (SqlDataAdapter da = new SqlDataAdapter(cmd))
{
da.Fill(dt);
}
}
dt.DefaultView.Sort = "Time_Stamp DESC";
dt = dt.DefaultView.ToTable();
return dt;
}
设置图表数据源的代码:
private void do_chart_I1(RunningTests rt)
{
muCalGUI1.chartI1.Series.Clear();
DataTable dt = SQL.get_I1(rt);
muCalGUI1.chartI1.DataSource = dt;
Series s = new Series("I1");
s.XValueMember = "Time_Stamp";
s.YValueMembers = "I1";
s.ChartType = SeriesChartType.Line;
s.BorderWidth = 2;
s.MarkerSize = 5;
s.MarkerStyle = MarkerStyle.Circle;
muCalGUI1.chartI1.ChartAreas[0].AxisY.IsStartedFromZero = false;
muCalGUI1.chartI1.ChartAreas[0].AxisX.LabelStyle.Format = "yyyy-MM-dd\nHH:mm:ss";
muCalGUI1.chartI1.ChartAreas[0].AxisY.LabelStyle.Format = "0";
muCalGUI1.chartI1.ChartAreas[0].RecalculateAxesScale();
muCalGUI1.chartI1.Series.Add(s);
muCalGUI1.chartI1.Legends.Clear();
}
【问题讨论】:
-
旁注:日期/时间通常应查询上限排他(
<),以避免某些边界问题。除其他外,这使得“跨步”数据集变得更容易——例如,按分钟对结果进行分组。 -
谢谢,我继续在我的代码中进行了更改。测试可以针对同一个 ID 运行多次,所以我只想在测试期间显示测试样本。
-
应该有一个数据库函数来进行转换,不是吗?您使用哪个数据库?
-
@TaW SQLExpress 2008