我从配置文件获取一个 SQL 查询,通常包含3-6个连接。我需要在运行时基于 SqlDataReader 表示的结果集,查找每个列所对应的表名。以下是一些不起作用的方法:
SqlDataReader.GetName 返回列名但不包含表名。 SqlDataReader.GetSchemaTable 返回包含列信息的数据表,但所有表名均为空。 查询 information_schema 无法帮助我,因为我需要有关当前查询结果的数据(而且列名不唯一 - 不同表中可能会有相同名称的列)。
我正在使用 .net 3.5SP1/C# / SQL Server 2008 在控制台应用程序中。
编辑:我知道这不可能适用于所有情况,因为“列”可以来自多个表、函数甚至常量表达式 - 我正在寻找适用于简单情况的解决方案。
编辑2:找到了原因 - 您可以使用 SqlDataReader.GetSchemaTable 获取表信息,但必须将 CommandBehavior 设置为 KeyInfo,您可以在 ExecuteReader 调用中执行此操作。
SqlDataReader.GetName 返回列名但不包含表名。 SqlDataReader.GetSchemaTable 返回包含列信息的数据表,但所有表名均为空。 查询 information_schema 无法帮助我,因为我需要有关当前查询结果的数据(而且列名不唯一 - 不同表中可能会有相同名称的列)。
我正在使用 .net 3.5SP1/C# / SQL Server 2008 在控制台应用程序中。
编辑:我知道这不可能适用于所有情况,因为“列”可以来自多个表、函数甚至常量表达式 - 我正在寻找适用于简单情况的解决方案。
编辑2:找到了原因 - 您可以使用 SqlDataReader.GetSchemaTable 获取表信息,但必须将 CommandBehavior 设置为 KeyInfo,您可以在 ExecuteReader 调用中执行此操作。
reader = cmd.ExecuteReader(CommandBehavior.KeyInfo);