在sql字符串中使用vbscript变量后无法访问它-变量不是空的,但使用时出现错误



我有一个vbscript块,它接受一个变量,用它构建一个sql字符串,执行sql字符串,然后将sql查询的结果与原始变量一起传递到另一个子。它几乎一直在工作,除了一个实例。以下是代码(我添加了行号以供参考…此外,我知道record_source没有使用,我在几个月前为向后兼容性进行更改时留下了它):

1224    Sub UpdateContact1 (record_source, user_id)
1225        Response.Write("UpdateContact1 - user_id: " & user_id & "<br />")
1226        strSQL = "EXEC usp_GM_GetInfoForContact1 " & user_id
1227        Set rs = con.Execute(strSQL)
1228        Response.Write("UpdateContact1 after sql - user_id: " & user_id & "<br />")
1229        If Not rs.EOF Then
1230            Response.Write("UpdateContact1 inside of If<br />")
1231            Response.Write("user_id: " & user_id & "<br />")
1232            InsertFullContact1 user_id, rs("GoldMineAccountNumber"), rs("BusinessName"),     rs("FullName"), rs("LastName"), rs("Salutation"), rs("Title"), rs("WorkPhone"), rs("CellPhone"), rs("HomePhone"), rs("PrimaryFax"), rs("WorkExt"), rs("Address1"), rs("Address2"), rs("City"), rs("State"), rs("PostalCode"), rs("Country"), rs("FirstName"), rs("ReferralName"), rs("PrivateTitle"), rs("Specialty"), "", rs("GLA"), rs("GroupsDesc"), rs("RolesDesc")
1233        End If
1234    End Sub

下面是代码的结果:

UpdateContact1 - user_id: 34838
error '80020009'
/includes/gm_functions.asp, line 1228

最初的研究表明错误80020009可能表明变量为空。我检查使用IsNull:

1224    Sub UpdateContact1 (record_source, user_id)
1225        Response.Write("UpdateContact1 - user_id: " & user_id & "<br />")
1226        strSQL = "EXEC usp_GM_GetInfoForContact1 " & user_id
1227        Set rs = con.Execute(strSQL)
1228        If IsNull(user_id) Then
1229            Response.Write("user_id is null")
1230        Else 
1231            Response.Write("user_id is not null<br />")
1232            Response.Write("Length: " & Len(user_id) & "<br />")
1233        End If
1234        If Not rs.EOF Then
1235            Response.Write("UpdateContact1 inside of If<br />")
1236            Response.Write("user_id: " & user_id & "<br />")
1237            InsertFullContact1 user_id, rs("GoldMineAccountNumber"), rs("BusinessName"),     rs("FullName"), rs("LastName"), rs("Salutation"), rs("Title"), rs("WorkPhone"), rs("CellPhone"), rs("HomePhone"), rs("PrimaryFax"), rs("WorkExt"), rs("Address1"), rs("Address2"), rs("City"), rs("State"), rs("PostalCode"), rs("Country"), rs("FirstName"), rs("ReferralName"), rs("PrivateTitle"), rs("Specialty"), "", rs("GLA"), rs("GroupsDesc"), rs("RolesDesc")
1238        End If
1239    End Sub

输出:

UpdateContact1 - user_id: 34838
user_id is not null
error '80020009'
/includes/gm_functions.asp, line 1232 

使用相同的user_id在SSMS中手动执行存储过程可以正常工作。我甚至无法理解变量发生了什么,更不用说修复它了。我很感激你的帮助。

谢谢…

我很确定你的问题与定义变量有关。让我解释一下我为什么这么认为。我创建了一个测试页面(test.asp)

<!--#include virtual="/includes/gm_functions.asp"-->
<%
    UpdateContact1 "who cares", 34838
    'UpdateContact1DefineNewVar "who cares", 34838
    response.write("Finished")
 %>

这里是我的UpdateContact1和UpdateContact1DefineNewVar函数

Sub UpdateContact1 (record_source, user_id)
    Response.Write("UpdateContact1 - user_id: " & user_id & "<br />")
    strSQL = "EXEC usp_GM_GetInfoForContact1 " & user_id
    Response.Write("Hey I created a SQL query <br />")
    Set rs = con.Execute(strSQL)
    Response.Write("Hey I got some data<br/>")
    If Not rs.EOF Then
        Dim some ''code
    End If
End Sub
Sub UpdateContact1DefineNewVar (record_source, user_id)
    Dim strSQL
    Dim rs    
    Response.Write("UpdateContact1DefineNewVar - user_id: " & user_id & "<br />")    
    strSQL = "EXEC usp_GM_GetInfoForContact1 " & user_id
    Response.Write("Hey I created a SQL query <br />")
    Set rs = con.Execute(strSQL)
    Response.Write("Hey I got some data<br/>")
    If Not rs.EOF Then
                Dim some ''code
    End If
End Sub

输出如下:

UpdateContact1 - user_id: 34838

Microsoft VBScript运行时错误'800a01f4'

变量未定义:'strSQL'

/includes/gm_functions.asp,第1217行

UpdateContact1DefineNewVar - user_id: 34838 嘿,我创建了一个SQL查询

Microsoft VBScript运行时错误'800a01a8'

对象要求:"

/includes/gm_functions.asp,第1232行

所以这个嘿,我创建了一个SQL查询让我认为你正在使用的变量没有定义(包括文件丢失?)。我不是一个专家在vbscript,但我希望它会帮助你。

更新

我通过添加Response.Write(VarType(strSQL))来扩展代码

所以第一个输出是

Microsoft VBScript运行时错误'800a01f4' 变量未定义:'UpdateContact1'/test.asp,第5行

第二个是

0 UpdateContact1DefineNewVar - user_id: 34838嘿,我创建了一个SQL查询Microsoft VBScript运行时错误'800a01a8'对象要求:"/includes/gm_functions.asp,第1221行

0表示vbEmpty -表示空(未初始化)http://www.w3schools.com/vbscript/func_vartype.asp

在查看了Pavel提供的提示并对错误代码进行了更多研究之后,我能够解决这个问题。问题是,user_id被分配(在此sub被调用之前)到另一个记录集中的值,该记录集也存储在rs变量中(我在此sub中重新定义)。显然,在经典asp中,变量是通过引用而不是值赋值的…所以当我改变rs的定义时,user_id变量不再有值。我通过在子内部定义一个新变量并使用它来存储记录集而不是重新定义rs来解决这个问题。

我们需要查看存储过程来确定,但是它可能期待一个varchar字符串,而不是您传入的数字吗?

将SQL字符串装配线更改为以下内容:

strSQL = "EXEC usp_GM_GetInfoForContact1 '" & user_id & "'"

,看看能不能治好它

最新更新