[英]Selecting the same column from the same table multiple times in the same statement
我正在使用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的已连接RecordSets一起正常工作,但在C#中效果不佳。 我尝试了无数种解决方案。
有谁知道如何以通用方式处理此异常? (请记住,用户可以在查询编辑器中键入ANY select语句或join等)
有谁知道我将如何处理返回的列,以便删除列表中进一步显示的2列? (我的困难是,如果数据库中的列名是EMail
那么我确实select Email, * from Blah
中返回的2个相关列是EMail
而ADO.NET或C#将查询的*
部分中的第二个EMail
列别名为EMail1
因此我无法将第二列检测为重复并将其删除)
有人有我没想到的替代解决方案吗?
非常感谢你
实际上,您可以通过执行以下操作将所有变量重命名为email_userdefined:
选择First_Interesting_Field作为First_Interesting_Field_userdefined,Second_Interesting_Field作为Second_Interesting_Field_userdefined,*从A_Table_With_Many_Columns
将user_defined替换为所需的内容,例如订单号或其他任何用户可接受的内容
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.