【问题标题】:Manipulate Results in GridView RowDataBound or Directly in SQL?在 GridView RowDataBound 中或直接在 SQL 中操作结果?
【发布时间】:2010-09-14 01:07:09
【问题描述】:

我有一个关于效率的奇怪问题。假设我在数据库中有一个字段,它只是一个代表其他内容的数字。例如,值 1 表示期限为 30 天。

像这样编写 SELECT 语句会更好(更有效)吗...

SELECT
    CASE TermId
        WHEN 1 THEN '30 days'
        WHEN 2 THEN '60 days'
    END AS Term
FROM MyTable

...并将结果直接绑定到GridView,还是评估GridView的RowDataBound事件中的TermId字段并相应地更改单元格文本会更好?

不要担心可扩展性或类似的东西,我只关心整体效率的差异。值得一提的是,数据库驻留在 Web 服务器上。

【问题讨论】:

    标签: asp.net sql optimization


    【解决方案1】:

    出于多种原因,我会在网格视图中处理翻译。

    原因 #1:SQL 资源是共享的。网格是分布式的。更好的可扩展性。

    原因 #2:传输几个整数而不是字符串的带宽较低。

    原因 #3:代码可以本地化为其他语言而不影响 SQL Server 代码。

    【讨论】:

    • 我不明白原因 #2。带宽会不会相同,因为无论选择何种方法,用户都会看到相同的东西?
    • 我在 #2 上不好。我没有注意到环境是 ASP.NET。我在想一个 WinForms 网格。
    【解决方案2】:

    在这里,效率可能无关紧要 - 代码可维护性确实如此。 问问自己——这些价值观会改变吗?如果他们这样做怎么办?如果这些值发生变化,使用 2 年后我需要做什么? 如果很明显在 SQL 中编写脚本意味着更好的可维护性(更容易更改),那么在存储过程中进行。如果以后在代码中更改它们更容易,那么就这样做。 这样做的好处都非常低,因为代码看起来一点也不复杂。

    【讨论】:

      【解决方案3】:

      数据库表中称为 TermID 的字段将暗示自己代表另一个表的外键(可能称为“术语”)。

      如果是这种情况,那么该表可能有(或应该有)一个可以保存“30 天”文本的描述字段。您可以/应该加入此表以检索描述性文本。

      虽然此连接可能不会提高效率,但它是一个足够轻量级的连接,不会妨碍您。

      【讨论】:

      • 不,我们没有另一个带有描述的表格。这些数字是内部建立的并且众所周知。
      猜你喜欢
      • 2018-08-01
      • 2014-07-22
      • 1970-01-01
      • 2014-05-26
      • 1970-01-01
      • 2012-12-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多