Board logo

标题: [问题求助] VBS连接 mssql 数据库为什么会报错“下列工作站在这台服务器上有会话并打开了文件” [打印本页]

作者: CrLf    时间: 2014-8-7 01:19     标题: VBS连接 mssql 数据库为什么会报错“下列工作站在这台服务器上有会话并打开了文件”

想用 vbs 连接 mssql 数据库
但运行如下 vbs 报错 “下列工作站在这台服务器上有会话并打开了文件”,可是我没找到本机上有此类会话,请教下各位大牛知道这是肿么回事?
  1. Set DB = CreateObject("ADODB.Connection")  
  2. DB.Open "Provider=SQLOLEDB.1;Data Source=source;uid=name;pwd=password;database=master;"
复制代码

作者: yu2n    时间: 2014-8-11 13:46

本帖最后由 yu2n 于 2014-8-11 13:57 编辑

回复 1# CrLf
最好贴全代码,暂时看不出来有什么问题。

举个栗子:使用 VBS 在 SQL2000、SQL2005 中查询 Users 表中的 SID 字段
  1. Function GET_SID(ByVal strUserName)
  2.   On Error Resume Next
  3.   strDBServer = "sql01.abc.com"
  4.   strDBName = "admin_db"
  5.   strDBUserName = "admin_db"
  6.   strDBPassword = "P@ssW0rd"
  7.   strConn = "Provider=SQLOLEDB.1;Persist Security Info=False;User ID=" & strDBUserName & ";Password=" & strDBPassword & ";Initial Catalog=" & strDBName & ";Data Source=" & strDBServer
  8.   sSQL = "SELECT  TOP 1  [SID]  FROM  [Users]  WHERE  [UserName]='" & strUserName & "'"
  9.   Set conn  = CreateObject("ADODB.Connection")
  10.   Set rs = CreateObject("ADODB.RecordSet")
  11.   conn.ConnectionString = strConn
  12.   If Not Err.Number = 0 Then Exit Function
  13.   conn.Open
  14.   rs.Open sSQL, conn, 3, 3
  15.   If Not Err.Number = 0 Then Exit Function
  16.   If rs.Recordcount = 1 Then
  17.     strSID = rs("SID")
  18.   Else
  19.     strSID = ""
  20.   End If
  21.   rs.Close
  22.   conn.Close
  23.   Set rs=Nothing
  24.   Set conn = Nothing
  25. Exit Function
复制代码
USERS 表如下
  1. SID   USERNAME  PASSWORD
  2. uuid001  Yu2n  P@ssW0rd
  3. ...
复制代码

作者: CrLf    时间: 2014-8-11 14:24

回复 2# yu2n


    谢谢指点!回头到单位试试
作者: yu2n    时间: 2014-8-11 16:37

本帖最后由 yu2n 于 2014-8-11 17:55 编辑

回复 3# CrLf
如果要容错做的比较好的话,可考虑RS记录集与ADO数据库连接的验证:
  1. If (Not objRS Is Nothing) Then If (Not objRS.State = 1) Then ''Do Something
  2. If (Not objADOConn Is Nothing) Then If (Not objADOConn.State = 1) Then ''Do Something
复制代码
再贴一个正在用的,自行修改Conn连接、SQL语句、:
  1. Function GET_Password(ByVal strPCName)
  2.   On Error Resume Next
  3.   Dim strConn, strSQL, objADOConn, objRS, str
  4.   strConn = "Provider=SQLOLEDB.1;Persist Security Info=False;User ID=DBUSER1;Password=Abcd1234;Initial Catalog=ADMIN_DB;Data Source=SQL01.ABC.COM"
  5.   strSQL = "SELECT TOP 1 [pwd1] FROM [password] WHERE [name]='" & strPCName & "'"
  6.   Set objRS = CreateObject("ADODB.RecordSet")
  7.   Set objADOConn  = CreateObject("ADODB.Connection")
  8.   objADOConn.ConnectionString = strConn
  9.   objADOConn.Open
  10.   If (Not objADOConn Is Nothing) Then If (Not objADOConn.State = 1) Then Exit Function
  11.   objRS.Open strSQL, objADOConn, 3, 3
  12.   If (Not objRS Is Nothing) Then If Not objRS.State = 1 Then objADOConn.Close : Exit Function
  13.   If objRS.Recordcount = 1 Then str = objRS("pwd")
  14.   If (Not objRS Is Nothing) Then If (Not objRS.State = 1) Then objRS.Close
  15.   If (Not objADOConn Is Nothing) Then If (Not objADOConn.State = 1) Then objADOConn.Close
  16.   Set objRS = Nothing
  17.   Set objADOConn = Nothing
  18.   GET_Password = str
  19. End Function
复制代码





欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2