数据库结果作为null传递,除非它被读取

时间:2011-03-16 14:38:29

标签: iis-7 asp-classic iis-6 resultset

Set rslistings = my_conn.Execute(strSQL)

Do while NOT rslistings.Eof
    description = strip(rslistings("description"))
rslistings.MoveNext
loop

在strip中 - 正在传递NULL。但是,如果我附加调试器并检查rslistings(“description”)的内容,那么实际的Field对象将通过

这是非常古老的asp代码,但它适用于IIS6,而不是IIS7

编辑这只发生在“description”字段中,是一种文本类型(MySQL数据库)

strip不会做很多事情:

If NOT IsNull(passedinvalue) Then 
    // do something
Else
    // do something else

如果我像strip一样调用strip(rs(“description”)),那么传递Field对象时它永远不会为null。如果我将它分配给另一个值,则将其传入(如strip(mynewvar))然后传递正确的值。

编辑 - 下面要求的数据库位

Set my_conn = Server.CreateObject("ADODB.Connection")
Set rs = Server.CreateObject("ADODB.Recordset")
my_conn.Open "DSN=mydb"

SQL

Set rs = my_conn.Execute("SELECT description FROM table")

2 个答案:

答案 0 :(得分:1)

Field Collection是Recordset对象的默认成员。

Field对象的value属性也是如此。

所以以下两个代码语句是等价的。

Debug.Print objRs.Fields.Item(0)  ' Both statements print 
Debug.Print objRs(0)              '  the Value of Item(0).

如果为变量赋值或将其用作函数中的参数,则会有所不同。

答案 1 :(得分:0)

@Paul:如果strip在处理之前未检查description是否为NULL,则可以执行此操作 -

Do while NOT rslistings.Eof
    description = rslistings("description")

    If NOT IsNull(description) Then 
        description = strip(description)
    Else
        description = "" ' or you could have description = " " 
                         ' if you output to screen later on
    End If
rslistings.MoveNext
loop