我有一个类,它应该从数据库加载具有给定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
答案 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")