我从SqlDataReader
语句返回ExecuteDataReader
。
我想要的只是:在绑定到网格之前,在数据读取器中更改一些列名。
情况如下:
问题是:如果存储过程中的一列是大写的,并且网格中的相关列是小写的,则网格不会填充。
我有很多基于这种架构的存储过程。其中一些有很多行要显示。因此,我使用数据读取器来提高性能。
我只是一种更改数据阅读器列名的方法
sqlDataReader阅读器; reader.executedatareadet();
例如,在返回数据阅读器后,我有两列(A,B
)。
我希望将列'A'
更改为'a'
(转换为小写),然后再将其绑定到网格,如reader.GetName(i)
我希望能够做一些像
这样的事情reader.SetName(i)
但它接缝我们无法更改数据读取器列名
答案 0 :(得分:1)
答案 1 :(得分:0)
您可以尝试使用预定义的列名在DataTable中加载DbDataReader,然后在tout应用程序中将该表用作数据源。
答案 2 :(得分:0)
我的建议是:分离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完全分开。