我正在尝试从我的VBScript返回两个值并将它们存储在单独的属性包中:
包含If
条件
Call oBag.AddValue("Status","Bad")
Call objAPI.AddItem(oBag)
Else
Call oBag.AddValue("Status","Good")
Call objAPI.AddItem(oBag)
包含已执行的SQL查询的输出
Call oBag.AddValue("Count",objRS.Fields("CountStuff"))
Call objAPI.AddItem(oBag)
在SCOM旁边传递。
但是在调试时,我收到以下错误:
(41,1)ADODB.Field:BOF或EOF为True,或删除当前记录。需要操作需要当前记录。
以下是完整的VBScript:
Dim objCN, strConnection
Dim objAPI, oBag
Set objCN = CreateObject("ADODB.Connection")
Set objAPI = CreateObject("MOM.ScriptAPI")
Set oBag = objAPI.CreateTypedPropertyBag(2)
strConnection = "Driver={SQL Server};Server=SCOMSRVDB01,2880;Database=DBABee;Trusted_Connection=TRUE"
objCN.Open strConnection
Dim strSQLQuery
strSQLQuery = "Select COUNT (*) as CountStuff from sys.objects"
Dim objRS
Set objRS = CreateObject("ADODB.Recordset")
Set objRS = objCN.Execute(strSQLQuery)
'WScript.Echo (objRS.Fields("CountStuff"))
Call oBag.AddValue("Count", objRS.Fields("CountStuff"))
Call objAPI.AddItem(oBag)
Do Until objRS.EOF
'WScript.Echo objRS.Fields("CountStuff")
If objRS.Fields("CountStuff") > 0 Then
'WScript.Echo "evaluated as bad"
Call oBag.AddValue("Status","Bad")
Call objAPI.AddItem(oBag)
Else
Call oBag.AddValue("Status","Good")
Call objAPI.AddItem(oBag)
End If
objRS.MoveNext
Loop
Call objAPI.ReturnItems
objRS.Close
'Property[@Name='Status']
答案 0 :(得分:0)
错误消息似乎非常简单。您需要使用MoveFirst
方法将当前记录位置移动到objRS
记录集中的第一条记录。
但是,当MoveFirst
记录集为空(MoveLast
和objRS
都为{{1}时,对BOF
或EOF
的调用会产生错误}})。因此,请按以下方式将其命名为 :
True
资源:MoveFirst, MoveLast, MoveNext, and MovePrevious Methods (ADO)
答案 1 :(得分:0)
如果您只需要发送一个PropertyBag DataItem,则不应将其添加到Collection。
Set oBag = Call objAPI.CreatePropertyBag()
If Not (objRS.BOF And objRS.EOF) Then
objRS.MoveFirst
Call oBag.AddValue("CountStuff", objRS.Fields("CountStuff"))
Call objAPI.Return(oBag)
End If
Call objRS.Close()
最好比较System.ExpressionFilter中的Bad / Good状态,如果它没有硬布尔逻辑:
<Expression>
<SimpleExpression>
<ValueExpression>
<XPathQuery Type="Integer">Property[@Name="CountStuff"]</XPathQuery>
</ValueExpression>
<Operator>Greater</Operator>
<ValueExpression>
<Value Type="Integer">0</Value>
</ValueExpression>
</SimpleExpression>
</Expression>