从 SQL Server Management Studio 以交互方式运行 SQL 命令的用户可见的 sql 命令输出与执行 ADO 命令或 ADO 查询对象返回的输出不同。
USE [DBNAME]
BACKUP DATABASE [DBNAME] TO
DISK = 'C:\SqlBackup\Backup.mdf'
成功完成输出是这样的:
Processed 465200 pages for database 'DBNAME', file 'filename' on file 2.
Processed 2 pages for database 'DBNAME', file 'filename_log' on file 2.
BACKUP DATABASE successfully processed 465202 pages in 90.595 seconds (40.116 MB/sec).
当我使用上面设置的 CommandText 或 SQL 执行 TADOCommand 或 TADOQuery 时,我没有得到任何这样的输出。如何从 SQL 命令的执行中读取这个“辅助输出”?我希望也许通过一些原始的 ADO 操作,我可能能够执行命令并取回上面的信息,以取得成功,以及执行 Sql 备份时的任何错误。
更新:下面的答案对我来说比我天真的尝试更好,它没有工作,使用普通的 Delphi TADOCommand 和 TADOConnection 类:
- 创建 TADOCommand 和 TADOConnection。
- 执行命令。
- 获取信息消息。
我在自己的编码尝试中遇到的问题是,我的第一个命令是“use dbname”,而我在代码中遍历的唯一记录集是“use dbname”命令的结果,而不是我正在执行的第二个命令。下面接受的答案遍历从执行 ADO 命令返回的所有记录集,因此它工作得更好。由于我在后台线程中执行所有这些操作,我实际上认为最好还是创建原始 Com 对象,并避免在我的线程中出现任何 VCL 纠缠。如果有人感兴趣,下面的代码可能是一个不错的组件,请告诉我,我可能会制作一个开源的“SQL Backup for Delphi”组件。