Coldfusion CFIF语句检查数据库(MSSQL)是否正在连接或存在
我试图在Coldfusion 16中编写一个if语句,以检查它是否可以连接到数据库或它是否存在。如果它可以连接到数据库,则显示页面,否则显示下来进行维护。我应该如何检查以确保数据库已启动?在此方面的任何帮助都将不胜感激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>
<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()中。否则,您需要将其添加到每个页面,这非常麻烦。