我正在尝试编写一个能够从 Microsoft SQL Server 数据库导入和导出特定数据库以及用户和登录名的程序。我的代码和 ODBC 之间有一个抽象层,我们的许多其他软件都使用该抽象层。抽象层通常在关闭自动提交的情况下运行并自行处理事务,但由于 BACKUP 命令不喜欢在任何事务中运行,我正在使用该层的另一种方法,称为 executeDirect,它在自动提交的情况下运行它。
该方法使用 SQLExecDirect 函数来运行 BACKUP 命令。完成后,函数返回 SUCCESS_WITH_INFO,因为 BACKUP 命令喜欢提供三行输出。然后代码尝试使用 SQLGetDiagField 获取输出,并能够从记录 #1 中收集第一行,但没有记录 #2。
该方法要做的最后一件事是将连接重置为自动提交关闭,但是当它尝试这样做时,会发生错误,说“连接正忙于另一个命令的结果”,SQL 状态为“HY000”。所以,显然,连接想要汇出另外两行输出,但我不知道如何让它这样做。