我写了一个网关从我的数据库中获取结果集。我如何将每一行存储在单独的道具中,以便我可以进一步操纵每条记录?或者,我可以直接访问结果集来获取记录吗?如何将查询中的记录放入DAO中?
这是我的网关(顺便说一句,我应该写CFQUERY内的条件逻辑到扩展这一个单独的CFC?)
<cfcomponent name="MaterialDao" hint="data access object" output="false">
<cffunction name="init" hint="constructor" access="public" output="false" returntype="MaterialDao">
<cfargument name="dsn" type="String" required="true" hint="datasource" />
<cfset variables.instance.dsn = arguments.dsn />
<cfreturn this />
</cffunction>
<cffunction name="readMaterial" hint="read" access="public" output="false" returntype="Query">
<cfargument name="district" type="String" />
<cfset var qReadMaterial = "" />
<cfquery name="qReadMaterial" datasource="#variables.instance.dsn#">
<cfif StructKeyExists(arguments,"district")>
SELECT A.NR, A.BEZ, D.BES, D.STA
<cfelse>
SELECT A.NR, A.BEZ
</cfif>
FROM DEK AS D INNER JOIN ART AS A
ON D.NR = A.NR
WHERE 0=0
<cfif StructKeyExists(arguments,"district")>
AND D.BEZ = #arguments.district#
</cfif>
ORDER BY A.BEZ
</cfquery>
<cfreturn qReadMaterial />
</cffunction>
</cfcomponent>
我已经读了很多文章,似乎有对此事有不同的看法(DAO与Gateway,DAO &网关等)。最佳做法是什么?专业人员做什么?
我注意到你在你的cfif语句中使用了#号。没有必要使用#符号,除非使用变量作为某些输出的一部分,例如查询,视图或标记参数,就像您使用datasource =“#variables.instance.dsn#”所做的那样它位于引号之间。只是一个小技巧,可以为您节省一些键入击键。 :) – Jayson 2009-06-22 13:49:58
我整合了Aaron的提示,并将我的网关更改为dao以便更加符合专业人员的要求:) – mrt181 2009-06-22 14:58:16
您错过了StructKeyExist检查中的闭合零件。 – 2009-06-22 22:53:25