使用类方法立即返回已处理的DB数据

时间:2015-08-20 18:20:07

标签: asp.net asp-classic recordset

我有一个类,它应该从数据库加载具有给定ID的文章。它返回带有请求的数据库行的记录集。它运行良好,但有时我想附加一个列。但是,我只能更改已存在列的值。像这样:

article("imageID") = getImageURL(article("imageID"))

这样,我用它的URL重写了图像ID。

但是我要说我想要返回ID和URL。根据我的发现,当记录集已经由数据库中的数据填充时,不可能将列附加到记录集。一种解决方案是使用类变量,但我正在寻找一种方法来一次返回所有数据(不将它们分成记录集和类变量),因为在我的情况下会有太多这样的变量而且我不喜欢无论如何,我觉得它很干净。那么最好的其他方法是什么呢?

这是我目前的代码:

public property get getRecordSet()
    set article = Server.CreateObject("ADODB.Recordset")        
    article.open "SELECT * FROM article WHERE id = '" & articleId & "'", db, 2, 3

    if not data.eof then
        // This formats some values, so I can directly use them when returned

        article("imageID") = getImageURL(article("imageID"))
        article("date") = getFormatedDate(article("date"))

        // imageID and date are rewritten now, so I can't access
        // their original values anymore

        // But instead of above, I would like to keep imageID and date
        //   and return their processed values as well.
        //     As follows (but it's not the correct working way):

        article("imageURL") = getImageURL(article("imageID"))
        article("formatedDate") = getFormatedDate(article("date"))
    end if

    // Return recordset
    set getRecordSet = article
end property

1 个答案:

答案 0 :(得分:1)

有什么理由需要返回记录集吗?看起来你只是为一行返回值。如果您需要添加其他信息,那么无论如何您都会违反记录集合同。您可以轻松返回数组或字典。

例如,如果您有一个getDictionary()属性:

Public Property Get getDictionary()

    set article = Server.CreateObject("ADODB.Recordset")        
    article.open "SELECT * FROM article WHERE id = '" & articleId & "'", db, 2, 3

    Set getDictionary = Server.CreateObject("Scripting.Dictionary")

    getDictionary.Add "imageID", article("imageID")
    getDictionary.Add "imageURL", getImageURL(article("imageID"))
    getDictionary.Add "date", article("date")
    getDictionary.Add "formatedDate", getFormatedDate(article("date"))

End Property

然后你可以像这样使用它:

Response.Write someObject.getDictionary.Item("imageURL")