Application.cfc 设置 DSN 并调用该 DSN

Application.cfc setting DSN and calling that DSN

有人向我展示了如何使用 Application.cfc 而不是 Application.cfm 来做到这一点 - 没关系,我喜欢学习新东西。然而,在我进行更改后,我无法弄清楚如何让 DSN 正常工作。在我刚刚在 Application.cfm 文件中使用一组 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 = [];
    }
}

如何在查询中调用它?

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

application.dsn = "foo";

并像这样引用它:

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

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

我可以在任何 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>