1

我不确定我是否以正确的方式处理这个问题,但我非常开放并感谢任何建议。

我正在根据 SQL 数据库中的数据构建图表。

该图表有“年龄”和“百分位数”,或者是我最关心的两个字段。

我的 web.config 中有一个名为“Percentiles”的配置部分。这样可以在此配置部分中识别要显示的百分位数。例如:

<percentiles>
<add percentile="P50" visible="true">
<add percentile="P75" visible="true">
<add percentile="P85" visible="false">
<add percentile="P95" visible="true">
...
</percentiles>

我将解析百分位数列表,并希望过滤我的数据集或根据该列表生成我的查询。百分位数作为列存储在数据库中。因此,例如,我希望我的查询基于该配置看起来像这样

SELECT P50, P75, P95 FROM MyData

现在我想我可以执行 SELECT * 并从我的数据集中删除这些列,或者只是不将它们作为“系列”添加到我的图表中。但是,我是一名新手开发人员,希望改进我做事的方式。根据我的经验,获取所有数据(尽管数量很少)似乎不是一个好习惯。

所以,这就是我到达 SQLDataAdapter 的地方。是否可以通过代码构建我的查询以仅包含我想要的列?我想知道是否可能的伪代码是这样的:

foreach(Percentile p in PercentileConfiguration)
{
    myDataAdapter.Select.Columns.Add(p.Percentile);
}

这是一个好方法吗?非常感谢任何和所有建议!谢谢!

4

2 回答 2

0

我很困惑。乍一看,这似乎是一个纯粹关于如何查询数据库的问题。答案是您构建了一个 SQL 命令来执行此操作。我不明白您为什么将数据库字段名称存储在 web.config 中。如果您希望查询看起来像“SELECT P50, P75, P95 FROM MyData”,那么就这样做。

于 2009-10-26T08:02:26.200 回答
0

SELECT * .... 会比 SELECT P50、P75 等稍慢一点。但只是稍微慢一点。如果您只运行一次查询(而不是在循环中多次运行,或其他),并且您的表没有大量列或包含大量数据的列,那么性能损失将是如此名义上的选择特定列的努力和维护可能不值得。有人曾经告诉我,如果您必须在可读(可维护)的代码和运行速度快一毫秒的代码之间进行选择,请选择可读代码。

也就是说,如果您要这样做,您只需要构造 sql 文本,然后将其传递给您的适配器。

就像是:


StringBuilder columns = new StringBuilder();
foreach(Percentile p in PercentileConfiguration)
{
    if(columns.ToString().Length > 0) columns.Append(", ");
    columns.Append(p.Percentile);
}
string sql = string.Format("SELECT {0} FROM myTable", columns.ToString());
SqlDataAdapter da = new SqlDataAdapter(sql, connectionString);
...
...
...
于 2009-11-04T22:51:33.397 回答