我有一个从配置文件中获取的 SQL 查询,该查询通常包含 3-6 个连接。
我需要在运行时查找,根据SqlDataReader 所代表的结果集,查找每一列的表名。
以下是一些不起作用的东西:
- SqlDataReader.GetName 返回列名,但不返回表名。
- SqlDataReader.GetSchemaTable 返回包含列信息的数据表 - 但所有表名均为空。
- 查询 information_schema 没有帮助,因为我需要有关当前查询结果的数据(并且列名不是唯一的 - 在不同的表中有同名的列)。
我在控制台应用程序中使用 .net 3.5SP1/C#/SQL Server 2008。
编辑:我知道这对于所有情况都是不可能的,因为“列”可以从多个表、一个函数甚至一个常量表达式组合在一起——我正在寻找在简单情况下有效的东西。
编辑 2:找出它为什么不起作用 - 您可以使用 SqlDataReader.GetSchemaTable 获取表信息,但您必须将 CommandBehavior 设置为 KeyInfo,您可以在 ExecuteReader 调用中执行此操作:
reader = cmd.ExecuteReader(CommandBehavior.KeyInfo);