我正在使用 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
有没有人有我没有想到的替代解决方案?
非常感谢