我继承了一个在CF 9.01上运行的大型应用程序。
我正在将其移植到Lucee 5.3.3.62,但是与和存在一些问题
我知道我应该将其替换为,但是此应用程序具有〜1000个源文件(!!),并且由于时序原因,目前不明显替换所有这些标签。
Lucee抛出如下错误:
起初,我认为日期字段存在问题,因为Lucee与CF 9.01的处理方式不同,但事实并非如此。
因此,我创建了一个测试表(在MS-SQL Server 2008R2上):
CREATE TABLE [dbo].[LuceeTest01](
[Field1] [nvarchar](50) NULL,
[Field2] [nvarchar](50) NULL ) ON [PRIMARY]
在Lucee中,我使用的是数据源:Microsoft SQL Server(供应商Microsoft),称为“一个”
这是我的测试应用程序:
<cfset Form.Field1 = "Field1">
<cfset Form.Field2 = "Field2">
<cfoutput>
<cfinsert datasource="one"
tablename="LuceeTest01"
formfields="Field1, Field2">
</cfoutput>
当我运行它时,我得到同样的错误。知道为什么吗?
完整跟踪在这里:https://justpaste.it/6k0hw
谢谢!
编辑1:
好奇的。我尝试使用“用于MS SQL Server和Sybase的jTDS Type 4 JDBC驱动程序”作为数据源驱动程序,现在错误是:
这可以追溯到以下语句:
{call []..sp_columns 'LuceeTest01', '', '', 'null', 3}
当我在Microsoft SQL Server Management Studio中尝试此操作时,出现相同的错误。
但是,当我指定数据库名称(“one”作为第三个参数)时,MS SQL SMS中没有错误。
EXEC sp_columns 'LuceeTest01', '', 'one', 'null', 3
Lucee不应该从数据源配置中获取此参数吗?
编辑2:
如@Redtopia所建议,当指定“tableowner”和“tablequalifier”时,它适用于jTDS驱动程序。将使用它作为解决方法。
更新的示例代码:
<cfset Form.Field1 = "Field1">
<cfset Form.Field2 = "Field2">
<cfinsert datasource="onecfc"
tableowner="dbo"
tablename="LuceeTest01"
tablequalifier="one"
formfields="Field1,Field2">
EDIT3:
此处提交的错误:https://luceeserver.atlassian.net/browse/LDEV-2566
最佳答案
我有99%的信心,这是Lucee/JDK/JDBC Driver的错误,而不是配置中的错误。
来源:
最初,我怀疑一些低调的成果,例如您在“Field2”中领先的空白。然后,我看到您的注释显示您在使用其他数据库驱动程序时尝试使用该方法进行了修剪,并且Edit1出现了其他错误。因此,我着手尝试重现您的问题。
在Lucee 5.2.4.37
和MS SQL Server 2016上,配备了示例代码和两个新的数据源-每个用于sqlt的jTDS (MSQL and Sybase)
驱动程序和SQL上的Microsoft SQL Server (JDBC4 - Vendor Microsoft)
,我无法在这两个驱动程序上重现这两个问题。即使选择性地取消各种数据库权限并为SQL用户更改默认数据库,我仍然只能强制执行不同的(预期的)错误,而不是您的错误。
一旦我将管理员更新更新为Lucee 5.3.3.62
并重新运行测试,我就用相应的数据源击中了您的两个错误,而数据库许可,数据源配置或示例代码没有其他更改。
祝您好运,说服Lucee伙计,这些轶事证据证明是个错误,但如果您需要其他声音,请给我喊一声。虽然我不在自己的代码中使用cfinsert/cfupdate,但最近我一直在支持具有相似的听起来和大小的遗留CF应用程序,并且对围绕其重构或现代化的后勤挑战表示同情!
编辑:
我在上面的评论中尝试了@Redtopia的tablequalifier
建议。对于任何一个数据库驱动程序,仅添加tablequalifier属性都不适合我。
对于MS SQL Server驱动程序,同时使用tablequalifier="dbname"
和tableowner="dbo"
仍然对我不起作用,但似乎对jTDS驱动程序有效,因此这是一种可能的解决方法,意味着更改每次出现的标签,因此理想情况下,Lucee伙计将能够从根本上解决该错误,或者确定Lucee本身没有破解的Java更新。
关于sql-server - ColdFusion 9.01-> Lucee 5.3.3.62和<cfinsert>/<cfupdate>,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58768532/