2013-10-20 38 views
1

我一直在构建一个利用面向对象方法和存储过程的新Coldfusion应用程序。虽然一切都像魅力一样,但由于SP和优化的mysql代码,该应用程序非常快速,如果你能帮我清除一件事情,我将非常感激:)我有dbcode.cfc,因为您可能已经猜到了将所有查询存储在存储过程。这就是说,通常什么是存储全球DNS参数的最佳方法?在ColdFusion中定义全局DSN 10

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.in我来说,我也可以在dbcode.cfc

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

4.additionally一个可以使用像这样设置多个数据源

<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

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

  1. 设置数据源的一部分的Application.cfc构造是OK

  2. 设置在OnApplicationStart()的DSN的作品太多,但你需要使用:

    <cfset application.datasource = "myDB"> 
    

2.1在每个请求中设置数据源是毫无意义的,除非数据源随每个请求发生更改。我怀疑是不是

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

  2. 您可能想了解一下数组和结构之间的区别。它看起来像什么,你想要做的是:

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

    我不会做这样的做法:

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

他们会然后通过是accessable。数据库通常不是任何数组。每个服务器都有自己的目的。您的DSN应该反映更多的一个操作:

  • 服务器
  • 数据库
  • 目的
+0

“你不应该接触queries.cfc”感谢您指出了这一点。 queries.cfc实际上是一个dbcode.cfc :) – user2595617

+0

“我不会这样做,数据库通常不是任何数组......”好的,如何设置多个DSN? Ben Nadel用struct发布了一个例子,这就是我看到这样一个问题的地方:) – user2595617

+0

您可能想创建一个新的问题,其中包含一些他的代码并链接到他的文章。然后,我可以权衡他在做什么。 –