6

我有从声明SqlDataReader中返回的信息。ExecuteDataReader

我想要的是:在绑定到网格之前更改数据阅读器中的一些列名。

情况如下:

  1. 首先我建立了网格的结构(结构在数据库中的表中,它是根据过去系统中存储过程的输出填充的)
  2. 我执行数据阅读器来执行存储过程
  3. 将数据读取器绑定到网格

问题是:如果存储过程中的一列是大写的,而网格中的相关列是小写的,则网格不会填充。

而且我有很多基于这种架构的存储过程。其中一些有很多行要显示。正因为如此,我使用数据阅读器来提高性能。

  1. 我不想更改存储过程中的列名(工作量太大)
  2. 我不想将数据读取器的结果复制到另一个数据持有者(因为开销和性能低下)
  3. 我只是更改数据读取器的列名的一种方法

    sqlDataReader 阅读器;reader.executedatareadet();

例如,在返回数据阅读器后,我有两列 ( A,B)。

我想在将列绑定到网格之前将其更改'A''a'(转换为小写)reader.GetName(i)

我希望能够做类似的事情

reader.SetName(i)

但似乎我们无法更改数据读取器列名

4

3 回答 3

1
  1. 您可以更改 GridView 中的列名
  2. 如果可能的话,用新的列名改变存储过程
于 2012-12-19T06:39:23.527 回答
0

您可以尝试将 DbDataReader 加载到具有预定义列名的 DataTable 中,然后将该表用作 tout 应用程序中的数据源。

于 2012-12-19T06:16:53.703 回答
0

我的建议是:将 UI 和数据库代码分开。如果您的 UI 受到数据读取器的影响,那么这只会让我问:“为什么 UI 与数据读取器通信?”。这两件事在堆栈的完全相反的两端。我会通过让您的 DAL 返回填充的 POCO/DTO 类型(或可能的视图模型类型)的具体列表来抽象这一点,即

public List<Customer> GetCustomers({some filter etc}) {...}

然后绑定到那个,即

var customers = dal.GetCustomers(...);
...
someUI.DataSource = customers;

Customer然后使用以下属性很好地定义该类型:

public class Customer {
    public int Id {get;set;}
    public string Name {get;set;}
    ...
}

DAL 的任何实现更改现在都与 UI 完全分离。

于 2012-12-19T07:35:37.430 回答