2010-04-29 73 views
2

我正在研究传统的VB6应用程序,因为我已经很长时间了,因为我查看了VB6或ADO。应用程序所做的一件事就是执行SQL Tasks,然后将成功/失败输出到XML文件中。如果出现错误,则将文本插入任务节点。在使用ADO时成功执行SQL时返回数据库消息

我被要求做的事情是尝试做其他普通消息,如(323行受影响)

没有使用命令对象,它只是一个ADODB.Connection对象。这里是代码的要点:

Dim sqlStatement As String 
Set sqlStatement = /* sql for task */ 

Dim sqlConn As ADODB.Connection 
Set sqlConn = /* connection magic */ 

sqlConn.Execute sqlStatement, , adExecuteNoRecords 

什么是最好的方式来捕获非错误消息,所以我可以输出它们?或者甚至有可能?

回答

4

影响被返回的行通过Connnection对象的Execute方法的第二个可选参数

Dim num As Long  
sqlConn.Execute sqlStatement, num, adExecuteNoRecords  
MsgBox num & " records were affected" 
+0

是的,我真的应该在MSDN上查找功能。卫生署。谢谢你的建议,但那只能让我成为那里的一部分(如果这是我能做的所有事情,仍然是值得的)。 – peacedog 2010-04-29 20:06:07

0

我认为受影响的行是查询分析器/企业管理器的功能,而不是通过API返回的。

如果我记得正确,使用传统的ADO,我们必须先执行MoveLast然后执行MoveFirst以强制所有记录通过网络,然后对Recordset进行计数。

我还记得有关使用哪种游标类型会影响返回的记录数的信息。

除此之外,你是否试图抓住打印声明......看起来好像你没有使用存储过程,所以除了计数之外,你期望得到什么?

+0

不幸的是我真的不能说什么,我可以期待,但我是专门提出要“数数记录修改“和”由于查询成功完成而导致的任何成功消息“。有时或可能不会有一些sprocs在这里使用(应用程序负责修补客户端,所以可能很少执行很多任务)。作为新的,我无法真正说出SQL任务的本质除了我怀疑它有很大的不同之外)。 我不确定ADO.Net InfoMessage是否可以用于此目的,并且想知道是否有模拟。 – peacedog 2010-04-29 19:11:00

+0

嗯,除了返回的行数之外,我从未见过任何“成功”消息。用消息打印的唯一东西是PRINT语句的结果是sprocs。我很确定这些消息从来没有提供给客户端。 – Jeremy 2010-04-29 19:14:44

+0

我正在获取更多反馈,但我不清楚他们是否希望返回PRINT语句的能力(我计划是)。我知道像创建精灵声明这样的东西仍然会返回“命令成功”(或类似的东西),我相信他们也想要。 – peacedog 2010-04-29 20:00:22

4

除了在例程中有一个通用错误处理程序,ADO连接对象还有一个错误集合。执行某些操作后,请检查count> 0的错误,如果是,则需要迭代集合并记录所有错误。如果要在记录后继续,则有一个清除方法。

做了一个快速测试项目后,我发现使用WithEvents VB声明我的变量添加了InfoMessage事件。我运行了DBCC CHECKDB命令并且InfoMessage事件触发了一次。其他所有消息中的pConnection变量都有284个错误。

注意:Connection.Errors集合是基于0的。

+0

我知道这一点,但如果问题中的SQL语句成功,则不会有任何错误,并且这已被处理。 – peacedog 2010-04-29 19:54:43

+1

B是对的。 SQL“错误”的含义与典型的VB错误完全不同。如果查询失败,它会抛出一个错误,您可以在VB中捕获错误,但警告只会以ADODB.Connection对象的.Errors属性结束。 B的建议检查.Errors.Count会告诉你是否有任何警告信息(或非致命错误) – tgolisch 2010-04-29 20:16:22

+0

对不起,如果我不清楚在第一个评论,但这仍然不会给我任何其他消息。随着事件,OTOH,可能正是我所需要的。 – peacedog 2010-04-30 16:30:21

相关问题