如何在C#中更改DataReader中的列名?
我有一个如何在C#中更改DataReader中的列名?,c#,gridview,sqldatareader,C#,Gridview,Sqldatareader,我有一个SqlDataReader,它是从ExecuteDataReader语句返回的 我只想:在绑定到网格之前,在数据读取器中更改一些列名 情况如下: 首先我构建网格的结构(结构在数据库中的表中,该表是根据过去系统中存储过程的输出填充的) 我执行数据读取器来执行存储过程 将数据读取器绑定到网格 问题是:如果存储过程中的一列是大写的,而网格中的相关列是小写的,那么网格不会填充 我有很多基于这种体系结构的存储过程。其中一些要显示许多行。正因为如此,我使用数据读取器来提高性能 我不想更改存储过程中的
SqlDataReader
,它是从ExecuteDataReader
语句返回的
我只想:在绑定到网格之前,在数据读取器中更改一些列名
情况如下:
A,B
)
我想将列'A'
更改为'A'
(转换为小写),然后将其像阅读器一样绑定到网格。GetName(I)
我想做一些像这样的事情
reader.SetName(i)
但是我们不能更改数据读取器列名,您可以尝试将DbDataReader加载到具有预定义列名的DataTable中,然后在tout应用程序中将该表用作数据源
我的建议是:将UI和数据库代码分开。如果您的UI受到数据读取器的影响,那么我会问:“为什么UI会与数据读取器对话?”。这两件事是完全相反的堆栈两端。我想通过让DAL返回一个填充的POCO/DTO类型(或可能的视图模型类型)的具体列表来抽象这一点,即
Customer
类型通过以下属性进行了良好定义:
public class Customer {
public int Id {get;set;}
public string Name {get;set;}
...
}
DAL上的任何实现更改现在都与UI完全分离。你好,damyan Bogoev,谢谢..但存储过程的结果太多了,我不想复制到另一个数据持有者,如datatabele。您可以将存储过程与ORM一起使用。将其映射到将其具体化为给定类型的方法,您将获得所需格式的数据。这里展示了如何使用OpenAccess ORM使用低级ADO API而不是列名来实现这一点。如果可能,请尝试使用Column的索引属性。谢谢Anand,但在问题中,我提到我不想做任何一个解决方案sugest..DataReader仅用于读取返回的数据。您读取这些值并将它们放入自己的数据结构或变量中。更改数据读取器结构的唯一方法是在case存储过程中的数据源或case GridView中的数据绑定控件上。您好,Marcel,谢谢,您完全正确。但是,在这种情况下,性能对我来说至关重要。您可以将数据复制到另一个数据持有者。我认为我唯一的选择是更改存储过程,因为似乎无法更改数据的列名reader@abianari在任何需要绑定大量数据的情况下,这将对性能产生完全零的影响(假设您的读卡器到POCO层的速度很快,像“dapper”这样的东西将是理想的)。唯一的性能是网络延迟和数据库查询性能。事实上,即使您绑定了大量数据,也有一些非缓冲/流式方式可以使用
IEnumerable
而不是List
(事实上,“dapper”也内置了这种功能)。坦率地说:我拒绝你的要求。我花了很多时间寻找…@abianari。。。在性能关键的代码中,这不会成为瓶颈。Marc非常感谢……我必须实施并检查解决方案,稍后我会通知您。非常感谢
var customers = dal.GetCustomers(...);
...
someUI.DataSource = customers;
public class Customer {
public int Id {get;set;}
public string Name {get;set;}
...
}