【问题标题】:Can't Open Connection String to SQL Server in VBSscript无法在 VBScript 中打开到 SQL Server 的连接字符串
【发布时间】:2018-08-30 15:53:02
【问题描述】:

我有一个运行以下 sql 查询的 .vbs 脚本: Select COUNT (*) from sys.objects 从 sql 查询输出计算行数: https://i.stack.imgur.com/wduXW.png[1]

如果找到任何行 (> 0)。使用 SCOM 中的 PropertyBag 脚本运行时在 SCOM 中生成警报。

问题是, 调试脚本时(使用 cscript),我收到以下错误消息:

(11,1) 用于 ODBC 驱动程序的 Microsoft OLE DB 提供程序: [Microsoft][ODBC SQL Server Driver][Shared Memory]SQL Server 不存在或访问被拒绝。

虽然连接字符串似乎是正确的:

strConnection = "Driver={SQL Server};Server=SCOMSRVDB01;Database=DBABee;Trusted_Connection=TRUE"

这是完整的 VBScript:

Dim objCN, strConnection
Dim oAPI, oBag

Set objCN = CreateObject("ADODB.Connection")
Set oAPI = CreateObject("MOM.ScriptAPI")
Set oBag = oAPI.CreatePropertyBag()



strConnection = "Driver={SQL Server};Server=SCOMSRVDB01;Database=DBABee;Trusted_Connection=TRUE"
objCN.Open strConnection

Dim strSQLQuery
strSQLQuery = "Select COUNT (*) from sys.objects"

Dim objRS
Set objRS=CreateObject("ADODB.Recordset")

Set objRS = objCN.Execute(strSQLQuery)

Do Until objRS.EOF
                'WScript.Echo objRS.Fields("No column name")
                if objRS.Fields("No column name") > 0 then
                                                                'WScript.Echo "evaluated as bad"
                                Call oBag.AddValue("State","BAD")
                                Call objAPI.Return(oBag)
                else
                                Call oBag.AddValue("State","GOOD")
                                Call objAPI.Return(oBag)
                end if
                objRS.MoveNext
Loop

objRS.Close

值得一提的是, 在我们公司,如果不提及端口号,您将无法连接到 sql server。

但是当我尝试在连接字符串中添加它(端口:2880)时:

strConnection = "Driver={SQL Server};Server=SCOMSRVDB01,2880;Database=DBABee;Trusted_Connection=TRUE"

脚本返回以下错误:

(23,17) ADODB.Recordset:在与请求的名称或序号对应的集合中找不到项目。

【问题讨论】:

  • ADODB 错误,表明该项目连接被找到意味着你 DID 连接到数据库,它找不到列。我猜这是找不到的:objRS.Fields("No column name")

标签: sql-server vbscript scom


【解决方案1】:

ADODB 错误提示连接找到项表示您已成功连接到数据库,但找不到您请求的列。这是找不到的:objRS.Fields("No column name")

更改您的查询并命名该列:

strSQLQuery = "Select COUNT (*) as countStuff from sys.objects"

然后更改您要查找的内容:

if objRS.Fields("countStuff") > 0 then

【讨论】:

  • 嘿 Jen R,首先感谢您的帮助,非常感谢。我会检查并更新
  • 您也可以使用objRS.Fields(0) 来检查没有别名的第一个字段。
  • 嗨 Lankyart,感谢您的帮助。我之前尝试过这种方法,但我得到了同样的第二个错误
  • Jen R,我按照您的说明更新了脚本,但出现以下错误:(26, 33) Microsoft VBScript runtime error: Object required: 'objAPi'
  • 看来我需要声明objec objAPI,但只需添加:dim objAPI 不起作用..
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-25
  • 1970-01-01
相关资源
最近更新 更多