Stored procedures 从ColdFusion和Railo执行存储过程的常用方法

Stored procedures 从ColdFusion和Railo执行存储过程的常用方法,stored-procedures,coldfusion,railo,Stored Procedures,Coldfusion,Railo,我想我已经构建了最简单的场景。我只想把它传给每个人做一个精神检查。我的想法是: GetErrorCodes.cfm执行以下操作: <cfscript> response = new ErrorCodes().WhereXXX(); // ACF or Railo, doesn't matter </cfscript> sproc.cfc: component { function exec(procedure) { local.result = {};

我想我已经构建了最简单的场景。我只想把它传给每个人做一个精神检查。我的想法是:

GetErrorCodes.cfm执行以下操作:

<cfscript>
response = new ErrorCodes().WhereXXX(); // ACF or Railo, doesn't matter
</cfscript>
sproc.cfc:

component {
function exec(procedure) {
    local.result = {};
    if (server.ColdFusion.productname == 'Railo') {
        return new Railo().exec(arguments.procedure); // Has to be outside of sproc.cfc because ColdFusion throws a syntax error otherwise.
    }
    local.svc = new storedProc();
    local.svc.setProcedure(arguments.procedure);
    local.svc.addProcResult(name='qry'); 
    try {
        local.obj = local.svc.execute();
        local.result.Prefix = local.obj.getPrefix();
        local.result.qry = local.obj.getProcResultSets().qry;
    } catch(any Exception) {
        request.msg = Exception.Detail;
    }
    return local.result;
}
Railo.cfc:

    component {
        function exec(procedure) {
local.result = {};
            try {
                storedproc procedure=arguments.procedure result="local.result.Prefix" returncode="yes" {
                    procresult name="local.result.qry";
                }
            } catch(any Exception) {
                request.msg = Exception.Message;
            }
            return local.result;
        }
        }

所以我整天都在做这个,但是告诉我,如果要在ColdFusion服务器或Railo服务器上运行源代码,这是保持源代码不变的明智方法吗?

嗯。。。只是使用,而不是尝试使用两种不同的CFML平台相互排斥的CFScript方法。

Oh。我想我已经把头抬起来了,以至于我不能回头看。。。六羟甲基三聚氰胺六甲醚。。。。嗯??我得调查一下。谢谢也许作为安装过程的一部分,我可以让sproc.cfc成为ACF版本或Railo版本,而不必在每次调用函数时都执行if/then。我认为你是对的。这并不奇怪。我需要重新使用标记而不是脚本化组件——至少对于存储过程是这样。
    component {
        function exec(procedure) {
local.result = {};
            try {
                storedproc procedure=arguments.procedure result="local.result.Prefix" returncode="yes" {
                    procresult name="local.result.qry";
                }
            } catch(any Exception) {
                request.msg = Exception.Message;
            }
            return local.result;
        }
        }