1

我一直在利用面向对象的方法和存储过程构建一个新的冷融合应用程序。虽然一切都像魅力一样,但由于 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>

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

4

1 回答 1

1

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

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

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

    <cfset application.datasource = "myDB">
    

2.1 在每个请求上设置数据源是没有意义的,除非你的数据源随着每个请求而改变。我怀疑不是

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

  2. 您可能想继续阅读数组和结构之间的区别。看起来你想做的是:

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

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

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

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

  • 服务器
  • 数据库
  • 目的
于 2013-10-20T15:41:59.150 回答