在Coldfusion 10中定义全局DSN

时间:2013-10-20 15:20:55

标签: mysql coldfusion cfc coldfusion-10

我一直在构建一个新的coldfusion应用程序,利用面向对象的方法和存储过程。虽然一切都像一个魅力,应用程序非常快,由于SP和优化的mysql代码,我真的很感激,如果你能帮我清除一件事:)我有dbcode.cfc,你可能已经猜到存储所有查询与存储过程。也就是说,一般来说,存储全局DNS参数的最佳方法是什么?

1.这可以用于一个全球DSN

<cfset this.datasource ="myDB">

2.这也可以用于一个全球DSN

<cffunction name="onApplicationStart" returnType="boolean" output="false">
<cfset application.dsn = "myDB">
<cfset application.username = "userName">
<cfset application.password = "password">
<cfreturn true>
</cffunction>

2.1以上所有内容,但onRequest

3.在我的情况下,我也可以在dbcode.cfc中创建全局变量

<cfset variables.dsn = "myDB">
<cfset variables.username = "userName">
<cfset variables.password = "password">

4.另外,人们可以使用类似的东西来设置多个数据源

<cffunction name="onApplicationStart" returnType="boolean" output="false">
<cfset application.myDSNs = StructNew()>
<cfset application.myDSNs.1 = "myDB1">
<cfset application.myDSNs.2 = "myDB2">
.
.
.
<!---something similar for usernames and passwords--->
</cffunction>

那么处理这类事情的最有效方法是什么?

1 个答案:

答案 0 :(得分:1)

让我看看我是否可以回答您的DSN问题的每一部分。

  1. 将数据源设置为application.cfc构造函数的一部分是正确的

  2. 在OnApplicationStart()中设置DSN也有效,但您需要使用:

    <cfset application.datasource = "myDB">
    
  3. 2.1在每个请求上设置数据源都是没有意义的,除非您的数据源随每个请求而变化。我怀疑是不是

    1. 您不应该触摸queries.cfc。这是ColdFusion内部的,有可能破坏服务器上的所有内容。

    2. 您可能想要了解数组和结构之间的差异。看起来你想做的是:

    3. <cfset application.myDSNs = ["MyDB1", "MyDB2]>

      然后可以通过以下方式访问它们:

      #application.myDSNs[1]#
      #application.myDSNs[2]#
      

      我不会这样做。数据库通常不是任何数组。每个服务器都有自己的用途。您的DSN应反映以下其中一项:

      • 服务器
      • 数据库
      • 目的
相关问题