【发布时间】:2013-04-23 19:03:56
【问题描述】:
我正在使用 SQL Server 后端将 VB6 应用程序转换为 C#。该应用程序包括一个非常通用的查询编辑器,允许用户编写任何选择查询并在网格控件中直观地返回结果。有些表有几百列(设计不佳,我知道,但我无法控制)。管理员用户的典型用例是
select * from A_Table_With_Many_Columns
但是,虽然他们希望能够查看所有数据,但他们对 2 列特别感兴趣,并希望这些列显示为网格中的前 2 列(而不是例如第 67 列和第 99 列),因此他们执行以下语句:
select First_Interesting_Field, Second_Interesting_Field, *
from A_Table_With_Many_Columns
然后他们会去修改网格中的数据。但是,保存此数据时,会导致并发冲突 (DBConcurrencyException)。这适用于 VB6 的连接 RecordSet,但在 C# 中效果不佳。我尝试了无数种解决方案都无济于事。
有谁知道如何以通用方式处理此异常? (请记住,用户可以在查询编辑器中输入任何选择语句或连接等)
有谁知道我可以如何操作返回的列,以便删除列表中进一步显示的 2 列? (我的困难是,如果数据库中的列名是
EMail,那么我会这样做select Email, * from Blah,返回的2 个相关列是EMail,并且ADO.NET 或C# 别名来自*的第二个EMail列查询的一部分为EMail1,因此我无法将第二列检测为重复并将其删除)有没有人有我没想到的替代解决方案?
非常感谢
【问题讨论】:
-
查询是否返回DataTable对象?
-
是的,它最终会出现在绑定到 Infragistics UltraGrid 的 DataTable 中。
标签: c# sql sql-server duplicates