0

私のASPコードでは、これをaspエンジンでサーバー側スクリプトとして実行すると、問題なく次のようになります。しかし、VBS ファイルで VB スクリプトを使用してこの同じ接続を実行すると、DB に接続されませんか? Windows 2008 と 2008 R2 MSSQL を使用しています。何か案は?

 establish connection 
function DatabaseConnection()

' establish connection if not connected already
if not IsObject(objGlobalConn) then
    if Len(Application("WebConnectionString")) = 0 then
        Set oShell = CreateObject("WScript.Shell")
        Application.Lock
        Application("WebConnectionString") = oShell.RegRead("HKLM\SOFTWARE\TB\ConnectionString3")
        Application.Unlock
    end if
    set objGlobalConn = CreateObject("ADODB.Connection")
    objGlobalConn.ConnectionTimeout = 0
    objGlobalConn.CommandTimeOut = 0
    objGlobalConn.CursorLocation = 3 ' adUseClient
    objGlobalConn.Open Application("WebConnectionString")
end if

' return connection object
set DatabaseConnection = objGlobalConn

end function

私の VBScript ファイル:

' get the connection string
Set oShell = CreateObject("WScript.Shell")
sConnectionString  = oShell.RegRead("HKLM\SOFTWARE\TB\ConnectionString3")
Set oShell = Nothing
4

1 に答える 1

0

Application オブジェクトは、ASP で VBScript を実行している場合にのみ存在します。.vbs ファイルが WScript.exe または CScript.exe を介して Windows Script Host (WSH) で実行される場合、Application オブジェクトは使用できません。( On Error Resume NextWSH が発生させるエラー メッセージを抑制しているステートメントがどこかにあると思います。)

接続文字列を Application オブジェクトに格納する必要があるかどうかに基づいて、2 つの解決策が思い浮かびます。関数のApplication("WebConnectionString")外で使用されていないと仮定すると、への参照は削除できます。その後、関数は ASP と WSH の両方で実行できます。DatabaseConnectionApplication

function DatabaseConnection()
  Dim objGlobalConn, oShell, connectionString

  ' establish connection if not connected already
  if not IsObject(objGlobalConn) then
      Set oShell = CreateObject("WScript.Shell")
      connectionString = oShell.RegRead("HKLM\SOFTWARE\TB\ConnectionString3")
      Set oShell = Nothing

      set objGlobalConn = CreateObject("ADODB.Connection")
      objGlobalConn.ConnectionTimeout = 0
      objGlobalConn.CommandTimeOut = 0
      objGlobalConn.CursorLocation = 3 ' adUseClient
      objGlobalConn.Open connectionString
  end if

  ' return connection object
  set DatabaseConnection = objGlobalConn

end function

ただし、関数Application("WebConnectionString")の外部で を使用する場合はDatabaseConnection、ASP と WSH の両方で関数を機能させるために、もう少しコードが必要です。Applicationオブジェクトまたはその他の ASP 関連オブジェクトを参照するコードの他の部分は、次の呼び出しで同様に保護する必要がありIsRunningUnderASPます。

function DatabaseConnection()
  Dim objGlobalConn, oShell, connectionString

  ' establish connection if not connected already
  if not IsObject(objGlobalConn) then
      Set oShell = CreateObject("WScript.Shell")
      connectionString = oShell.RegRead("HKLM\SOFTWARE\TB\ConnectionString3")
      Set oShell = Nothing

      If IsRunningUnderASP() And (Len(Application("WebConnectionString")) = 0) then
          Application.Lock
          Application("WebConnectionString") = connectionString
          Application.Unlock
      End If

      set objGlobalConn = CreateObject("ADODB.Connection")
      objGlobalConn.ConnectionTimeout = 0
      objGlobalConn.CommandTimeOut = 0
      objGlobalConn.CursorLocation = 3 ' adUseClient
      objGlobalConn.Open connectionString
  end if

  ' return connection object
  set DatabaseConnection = objGlobalConn

end function

Function IsRunningUnderASP
  IsRunningUnderASP = _
    IsObject(Application) And _
    IsObject(Request) And _
    IsObject(Response)
End Function
于 2012-07-24T22:37:26.250 に答える