Я пытаюсь написать программу, которая может импортировать и экспортировать определенную базу данных, а также пользователей и имена входа из базы данных Microsoft SQL Server. У меня есть уровень абстракции между моим кодом и ODBC, который используется в большинстве других наших программ. Уровень абстракции обычно работает с отключенной функцией автоматической фиксации и обрабатывает транзакции самостоятельно, но поскольку команда BACKUP не любит запускаться в любой транзакции, я использую другой метод уровня, называемый executeDirect, который запускает ее с включенной автоматической фиксацией.
Метод использует функцию SQLExecDirect для выполнения команды BACKUP. Когда это будет сделано, функция вернет SUCCESS_WITH_INFO, поскольку команда BACKUP предпочитает выдавать три строки вывода. Затем код пытается получить вывод с помощью SQLGetDiagField и может собрать первую строку из записи №1, но нет записи №2.
Последнее, что хочет сделать метод, - это сбросить соединение, чтобы оно отключилось автоматически, но когда он пытается это сделать, возникает ошибка: «Соединение занято результатами другой команды», состояние SQL - «HY000». Итак, очевидно, соединение хочет передать две другие строки вывода, но я не знаю, как это сделать.





Команда BACKUP DATABASE работает как пакет, требуя вызова SQLMoreResults для продолжения резервного копирования.