Asp经典如何在连接到oracle链接服务器时捕获错误



我在经典ASP中有一个这样的查询:

sql_test="select * from Openquery(it_test, 'select * from IT_DB.HOST')

的问题是,我想测试连接到链接的服务器之前执行它,并得到一个错误的页面。

如果连接到链接的服务器不工作(例如:db down),我可以在本地SQL server 2000 db上执行查询,避免在页面上出现错误。

我倾向于使用这段代码…

'GetDataSet error columns...
const C_ERROR               = "ERROR"               'Used when an error is generated - to be fed to the comsuming routine
const C_NO_DATA             = "NO_DATA"             'Used when no data is returned to a consuming routine
const C_COL_IDENTIFIER      = 0
const C_COL_ERROR_ID        = 1
const C_COL_ERROR_MESSAGE   = 2
const C_COL_SQL             = 3
const C_COL_CONNECTION      = 4
'GetDataSet
'   Returns a table of data based on the supplied SQL statement and connection string.
'Parameters:
'   sqlString (string) - The SQL string to be sent.
'   connString (string) - The database connection string.
'Usage:
'   dataSet = GetDataSet(sqlString, connString)
'Description:
'   This function generates a table of information in a 2 dimensional array.  The first dimension represents the columns
'   and the second the rows.  If an error occurs while the routine is executing the array and the base index (0,0) is set 
'   to C_ERROR, (0,1) to the VBScript error index, and (0,2) to the VBScript error description.
function GetDataSet(sqlString, connString)
    'Initialise...
    dim returnVal, rsData
    on error resume next
        'Define and open the recordset object...
        set rsData = Server.CreateObject("ADODB.RecordSet")
        rsData.Open sqlString, connString, 0, 1, 1
        'Initialise an empty value for the containing array...
        redim returnVal(0,0)
        returnVal(0,0) = C_NO_DATA
        'Deal with any errors...
        if not rsData.EOF and not rsData.BOF then
            'Store the data...
            returnVal = rsData.GetRows()
            select case err.number
                case 3021   'No data returned
                    'Do nothing as the initial value will still exist (C_NO_DATA)
                case 0      'No error
                    'Do nothing as data has been returned
                case else
                    redim returnVal(4,0)
                    returnVal(C_COL_IDENTIFIER,0) = C_ERROR
                    returnVal(C_COL_ERROR_ID,0) = err.number
                    returnVal(C_COL_ERROR_MESSAGE,0) = err.description
                    returnVal(C_COL_SQL,0) = sqlString
                    returnVal(C_COL_CONNECTION,0) = connString
            end select
        end if
        'Tidy up...
        rsData.close
        set rsData = nothing
    on error goto 0
    'Return the array...
    GetDataSet = returnVal
end function

获取我的数据集。它返回一个你可以手动处理的数组(嗯…女人把手?),随你喜欢。

如果有错误,详细信息将在数组的相应元素中返回。

相关内容

  • 没有找到相关文章

最新更新