несколько операторов выбора в одном ODBCdataAdapter - PullRequest
0 голосов
/ 15 февраля 2011

Я пытаюсь использовать ODBCdataadapter в C # для запуска запроса, который должен выбрать некоторые данные во временную таблицу в качестве предварительного шага. Однако этот начальный оператор выбора вызывает завершение запроса, так что данные помещаются во временную таблицу, но я не могу выполнить второй запрос, чтобы получить его. Я определил, что проблема заключается в наличии двух операторов выбора в одном запросе к адаптеру данных. То есть следующий код выполняет только первый выбор:

select 1
select whatever from wherever

Когда я запускаю запрос напрямую через SQL Server Management Studio, он работает нормально. Кто-нибудь сталкивался с такой проблемой раньше? Я пробовал точно такой же запрос ранее в аналогичных базах данных, используя тот же код C # (отличается только строка подключения), и у меня не было проблем.

Прежде чем вы спросите, временная таблица полезна, потому что в противном случае я бы запустил целый ряд внутренних операторов выбора, которые бы перегружали базу данных.

Ответы [ 3 ]

1 голос
/ 15 февраля 2011

Предполагая, что вы выполняете команду, тип команды - CommandText, вам нужно ; для разделения операторов.

select 1;

select whatever from wherever;

Вы также можете рассмотреть возможность использования хранимой процедуры, если это возможно.Вы также должны использовать объекты клиент SQL вместо клиента ODBC.Таким образом, вы можете воспользоваться дополнительными методами, которые в противном случае недоступны.Вы также должны получить лучший результат.

Если вам нужно поддерживать несколько баз данных, вы можете просто использовать класс DataAdapter и использовать Factory для создания конкретных типов.Это дает вам преимущества использования встроенных драйверов без привязки к конкретному бэкэнду.ORMS, которые поддерживают несколько внутренних серверов, обычно делают это.Блок приложения для доступа к данным Enterprise Library, хотя и не ORM, также делает это.

0 голосов
/ 24 сентября 2018

Для ODBC-соединения требуется один оператор выбора и его извлечение из SQL Server. Если требуется какая-либо такая функциональность, взломщик может выполнить эту задачу

используйте запрос SET NOCOUNT ON

вверху вашего оператора select.

Когда задано значение SET NOCOUNT, счетчик (показывающий количество строк, на которые воздействует инструкция Transact-SQL) не возвращается. Когда SET NOCOUNT выключен, счет возвращается. Он используется с любым оператором SELECT, INSERT, UPDATE, DELETE. Настройка SET NOCOUNT устанавливается во время выполнения или выполнения, а не во время анализа. SET NOCOUNT ON в основном улучшает производительность хранимых процедур (SP). Синтаксис: SET NOCOUNT {ON | OFF}

0 голосов
/ 15 февраля 2011

К сожалению, у меня нет доступа на запись в БД, так как с моей организацией был заключен договор только на извлечение информации в хранилище данных. Эта программа является обобщенной для использования на нескольких системах, поэтому мы выбрали ODBC. Я полагаю, было бы не страшно переписать его, используя объекты управления SQL.

...