Coldfusion CFIF语句检查数据库(MSSQL)是否正在连接或存在

Coldfusion CFIF语句检查数据库(MSSQL)是否正在连接或存在,coldfusion,coldfusion-2016,Coldfusion,Coldfusion 2016,我试图在Coldfusion 16中编写一个if语句,以检查它是否可以连接到数据库或它是否存在。如果它可以连接到数据库,则显示页面,否则显示下来进行维护。我应该如何检查以确保数据库已启动?在此方面的任何帮助都将不胜感激 <cfquery name="DBUP" datasource="datasource"> SELECT ID FROM dbo.Entry </cfquery> <cfif DBUP> Show Page <cfelse>

我试图在Coldfusion 16中编写一个if语句,以检查它是否可以连接到数据库或它是否存在。如果它可以连接到数据库,则显示页面,否则显示下来进行维护。我应该如何检查以确保数据库已启动?在此方面的任何帮助都将不胜感激

<cfquery name="DBUP" datasource="datasource"> 
SELECT ID
FROM dbo.Entry 
</cfquery> 

<cfif DBUP>
 Show Page
<cfelse>
 Show Down For Maintenance
</cfif>

选择ID
从dbo.Entry
显示页面
为维护而展示

您可能需要将其添加到Application.cfc onRequest方法中

<cftry>
 <cfquery name="DBUP" datasource="datasource"> 
  SELECT ID
  FROM dbo.Entry 
  </cfquery>
<cfcatch type="any">
  Show DOwn For Maintenance
   <!---everything optional below this line--->
   <!---can show some custom message---> 
  <cfinclude template="errorMsg.cfm">
  <!---stop the processing further--->
  <cfabort>
</cfcatch> 
</cftry> 

选择ID
从dbo.Entry
为维护而展示

您不应该直接将错误消息或文件放入catch语句中。我们应该再检查一个条件(即错误代码是否为0)。想象一下,在某段时间内,开发人员可能会给出错误的查询,如未定义的列或缺少语法等。。。在此期间,也将执行捕获。因此,根据要求,我们必须检查数据源是否存在。如果我们想检查所有类型的问题,意味着我们不需要错误代码条件

<cftry>
        <cfset showPage = true>
        <cfquery name="DBUP" datasource="datasource">
            SELECT ID FROM dbo.Entry 
        </cfquery>
        <cfcatch type="database">
            <!--- The error code 0 is mentioned Datasource could not be found/exits.  --->
            <cfif cfcatch.cause.errorcode eq 0 >
              <cfset showPage = false >
                <!--- Data source does not exists --->
            </cfif>

        </cfcatch>
    </cftry>

从dbo.Entry中选择ID
基于showPage价值,您在这里是否有业务逻辑 .... ....
..

您应该将cfquery标记包装在try/catch块中。如果无法访问数据库,则可能会引发异常。可能把它放在你的
onRequest
中,这样你就可以在一个好地方再次找到它,而不是放在多个页面中。我很好奇你所说的“或者它存在”是什么意思。您指的是数据库、特定表。。。为什么这两者都不存在呢?此外,用于检查数据库可访问性的查询应该保持简短,如SQL Server的
select getDate()as DateNow
,而不是从表中选择所有行。后者是浪费流量带宽,因为结果实际上没有用于任何用途。为什么不捕获异常并在OnError()中处理它,而不是在每个页面上尝试/捕获?我不确定他们是否在使用Application.cfc。如果他们使用应用程序cfc意味着是的,我们也可以在一个错误中处理它。因此,我给出了简单CMS的答案。我也不知道,但希望如此,因为它是CF2016;-)如果没有,我建议像其他人建议的那样,将其放在OnRequest()中。否则,您需要将其添加到每个页面,这非常麻烦。