0

我正在使用 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# 中效果不佳。我尝试了无数种解决方案都无济于事。

  1. 有谁知道如何以通用方式处理此异常?(记住,用户可以在查询编辑器中输入任何选择语句或加入等)

  2. 有谁知道我如何操作返回的列,以便删除列表中进一步出现的 2 列?(我在这里的困难是,如果数据库中的列名是EMail这样,那么我会select Email, * from Blah返回 2 个相关的列,EMail并且 ADO.NET 或 C#为查询部分的第二EMail列起别名,因此我无法检测到第二列作为副本并将其删除)*EMail1

  3. 有没有人有我没有想到的替代解决方案?

非常感谢

4

1 回答 1

0

实际上,您可以通过执行以下操作将所有变量重命名为 email_userdefined 之类的名称:

选择 First_Interesting_Field 作为 First_Interesting_Field_userdefined,Second_Interesting_Field 作为 Second_Interesting_Field_userdefined,* 来自 A_Table_With_Many_Columns

将 user_defined 替换为您想要的任何内容,例如订单号或其他用户可接受的内容

于 2013-04-30T05:12:57.837 回答