У меня есть служба Windows, подключающаяся к базе данных SqlServer на локальном компьютере. Это работает отлично почти все время. Однако у крупного клиента связь с базой данных повреждена по редкой и неизвестной причине. Когда это происходит, вызовы DbDataAdapter.Fill возвращают DataSet с другим количеством столбцов, чем в переданной команде select (проверяется журналами трассировки, показывающими ожидаемый sql и количество возвращаемых столбцов). Похоже, что для первых нескольких наборов данных с ошибками экземпляр адаптера возвращает результаты предыдущего запроса. Это происходит, даже если объекты адаптера являются уникальными экземплярами, а вызовы создания соединения / адаптера защищены от потоков (поскольку DbProviderFactory не является потокобезопасным).
Кто-нибудь испытывал это или что-то подобное? Кто-нибудь знает, что может быть причиной этого? В данный момент мне трудно придумывать новые идеи по этой причине.