Application.cfc设置DSN并调用该DSN

时间:2016-08-17 16:52:20

标签: coldfusion application.cfc

我已经看过如何使用Application.cfc而不是使用Application.cfm来做这件事 - 这很好,我喜欢学习新东西。然而,在我做出改变之后,我无法弄清楚如何使DSN正常工作。在我刚在Application.cfm文件中使用set DSN之前。

<cfparam name="DSN" default="">
<cfset DSN = "krl" />

在这里叫出来:

<CFQUERY NAME="Inital" DATASOURCE="#DSN#">
    SELECT Website_Name
    FROM InitalizationData
</CFQUERY>

现在设置如下:

component {
    this.name = "app"; 
    this.Sessionmanagement = true;
    this.datasource = "krl";

    public void function onSessionStart() {
        // initialize cart 
        session.cart = [];
    }
}

如何在查询中调用它?

2 个答案:

答案 0 :(得分:0)

Application.cfc内,您通常会添加一个函数onApplicationStart()。然后,在该函数内定义

application.dsn = "foo";

并像这样引用它:

<cfquery name="test" datasource="#application.dsn#">

在CFC中将变量定义为this.datasource时,this范围仅存在于该CFC的上下文中。它无法从外部访问。

答案 1 :(得分:-1)

我可以在任何CFM页面中使用this.datasource。例如:

<cfinsert tableName="#variables.type#s" dataSource="#this.datasource#">

Application.cfc看起来像这样:

<cfcomponent
    displayname="Application"
    output="true"
    hint="Handle the application.">

    <!--- Set up the application. --->
    <cfset THIS.Name = "#cgi.server_name#" />
    <cfset THIS.SessionManagement = true />
    <cfset THIS.ApplicationTimeout = CreateTimeSpan( 1, 0, 0, 0 ) />
    <cfset THIS.SessionTimeout = CreateTimeSpan( 0, 0, 30, 0 ) />
    <cfset THIS.SetClientCookies = true />
    <!--- FOR THE DATASOURCE --->
    <cfset this.datasource = "MyDSN" />
...
</cfcomponent>

然而,在常规标签中,您根本不需要指定数据源,如果它在此范围内:

<cfquery name="get">
SELECT id
FROM restaurants
WHERE email = '#something#'
UNION       
SELECT id
FROM individuals
WHERE email = '#something#'
</cfquery>