2009-12-10 61 views

回答

4

内的数据源设置,你可以告诉它是否保持打开状态,或不符合维护连接设置。

由于担心SQL注入,我相信ColdFusion 8数据源的设置一次只能运行一个查询。要改变这一点,你需要修改连接字符串。

最好的办法是打开保持连接,并在需要使用cftransaction:

<cftransaction> 
<cfquery name="ins" datasource="dsn"> 
insert into table1 values(<cfqueryparam value="#url.x#">) 
</cfquery> 
<cfquery name="ins" datasource="dsn"> 
insert into table2 values(<cfqueryparam value="#url.x#">) 
</cfquery> 
</cftransaction> 

而且永远,永远使用用户提交的值cfqueryparam。

+0

HI,Sam感谢您的回应,您能告诉我在Coldfusion中保持Connection设置的位置在哪里? 这是真的如果我打电话 2次,它会像打开数据库连接2次? – CFUser 2009-12-10 18:52:24

+0

您可以根据需要在单个cfquery中运行尽可能多的SQL语句,甚至可以跳过物理数据库。 – 2009-12-10 20:04:56

+0

@Sam - 您可以详细解释“一次只运行一个查询”吗?我从来没有听说过这样的事情。只需在驱动程序/连接级别设置默认限制。 – Leigh 2009-12-10 20:54:22

3

我没有CF服务器尝试,但它应该工作正常IIRC。

类似:

<cfquery name="doubleInsert" datasource="dsn"> 
insert into table1 values(x,y,z) 
insert into table1 values(a,b,c) 
</cfquery> 

,如果你想更具体的例子中,你将不得不放弃更多的具体信息。

编辑:感谢@SamFarmer:新版本的CF比我已经使用会妨碍其

+1

可能需要那些语句之间分号。 – ale 2009-12-10 19:02:09

5

是否可以执行2插入或 使用cfquery的更新语句?

最有可能的是。但是否可以运行多个语句取决于您的数据库类型和驱动程序/连接设置。例如,当您创建MS SQL数据源时,默认情况下允许IIRC多个语句。而MySQL驱动程序通常会在默认情况下禁用多个语句。这是为了避免sql注入。所以在这种情况下,您必须在连接设置中明确启用多个语句。否则,你不能使用多个语句。还有一些数据库(通常是像MS Access这样的桌面数据库)根本不支持多种语句。所以我不认为这个问题有一个全面的答案。

如果两个插入/更新语句是相关的,那么您应该像Sam建议的那样使用cftransaction。这确保了这些陈述被视为一个单一的单元:即它们全部成功或者全部失败。所以你不会留下部分或不一致的数据。为了做到这一点,一个连接将用于交易中的两个查询。

我认为每一个我们称之为CFQUERY时候我们 正在打开新的连接DB

萨姆提到的,这就要看你的设置,无论您是使用cftransaction。如果启用维护连接(在CF管理员的数据源设置下),CF将维护一个开放连接池。所以当你运行一个查询时,CF只是从池中获取一个打开的连接,而不是每次都打开一个新连接。使用cftransaction时,应该对所有查询使用相同的连接。不管是否启用维护连接。

0

使用CFTRANSACTION将多个查询分组到一个单元中。

任何使用CFQUERY执行并置于和标记之间的查询都被视为单个事务。在事务块中的所有操作都已成功执行之前,这些查询请求的数据更改不会提交到数据库。如果在查询中发生错误,则事务块中先前查询所做的所有更改都会回滚。

使用ISOLATION属性可以额外控制数据库引擎在事务期间如何执行锁定。

欲了解更多信息,请访问http://www.adobe.com/livedocs/coldfusion/5.0/CFML_Reference/Tags103.htm

1

很抱歉的死灵(我是新来的网站)。

你没有提到你使用的数据库。如果你碰巧使用mySQL,你可以添加尽可能多的记录,最大堆大小将允许。

我经常在与默认堆大小一次插入多达〜4500条记录(但会取决于你的数据量)。 ('a','b','c'),('d','e','f'),('g','h)插入到您的表格(x,y,z) ','i')

所有数据库都应该这样做IMO。

HTH

+0

适用于Apache Derby。 – 2010-09-02 13:41:02

1

CF8中的mySQL驱动程序现在允许多个语句。 萨姆说,你可以使用把多项语句一起 或在ColdFusion管理员|数据&服务|数据源, 添加 allowMultiQueries =真 到连接字符串字段

相关问题