У меня есть запрос 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);