Coldfusion cftransaction标签出错

时间:2014-08-02 18:39:40

标签: coldfusion

我正在使用ColdFusion 11并且因为cftransaction而出错。我不确定是什么造成的。

我有两个CFC:abc.cfc和xyz.cfc。 abc.cfc不使用datasource属性:因为它是使用this.datasource在Application.cfc中定义的。

这是错误:

Error! The root cause was that: java.sql.SQLException: Usernames and Passwords for all the database tags within the cftransaction tag must be the same. Datasource inventorymgt verification failed.. Entry rolled back 

我在做的是:

<cftransaction action="begin">
    <cftry>
            <cfscript>
                f = structNew();
                f.companyName = '#arguments.structform.companyname#';
                f.address = '#arguments.structform.address#';
                f.settingsID = arguments.structform.settingsID;                 
                r = tblUpdate('settings',f);
                sresult = 'Updated';
            </cfscript> 
      <cfset str = "Cool! Settings has been " & sresult>
      <cftransaction action="commit"/>      
      <cfcatch type="any">       
        <cftransaction action="rollback"/>
        <cfset str = "Error! #cfcatch.Detail# #cfcatch.Message#. Entry rolled back">
      </cfcatch>
    </cftry>
  </cftransaction>

另一个期望init函数的CFC,如数据源,用户名,密码,使用以下查询方式来更新它:

<cfquery name="q" 
      datasource="#variables.dbsource#" 
      username="#variables.dbuname#" 
      password="#variables.dbpword#">

1 个答案:

答案 0 :(得分:1)

我认为原因在这篇文章中有解释: https://groups.google.com/forum/#!topic/cfwheels/AZTvxvhsapc

在cftransaction标记中,每个查询都必须使用相同的身份验证。您不能让一个查询使用datatasource,另一个查询使用同一事务中的用户名和密码。

我同意该链接的作者。我总是只在cf-administrator中定义一次数据源,所以我不必处理用户名/密码。然后,您可以通过数据源初始化您的cfc。

我不知道您的函数 tblUpdate 实际上在做什么,但可能是您使用的语法与您发布的查询不同?因为,这就是你的错误代码所说的:

  

cftransaction标记中所有数据库标记的用户名和密码必须相同。