Gun*_*erO 5 sql-server coldfusion cfml lucee
我继承了一个在CF 9.01上运行的大型应用程序。
我正在将其移植到Lucee 5.3.3.62的过程中,但是存在一些问题,我知道我应该将其替换为,但是此应用程序有〜1000个源文件(!!),并且当前替换所有这些标签由于时机原因不明显。
Lucee抛出如下错误:
“对象或列名丢失或为空。对于SELECT INTO语句,请验证每个列都有一个名称。对于其他语句,请查找空别名。别名定义为“”或不允许。将别名更改为有效名称。”
起初,我认为日期字段存在问题,因为Lucee与CF 9.01的处理方式不同,但事实并非如此。因此,我创建了一个测试表(在MS-SQL Server 2008R2上):
CREATE TABLE [dbo].[LuceeTest01](
[Field1] [nvarchar](50) NULL,
[Field2] [nvarchar](50) NULL ) ON [PRIMARY]
Run Code Online (Sandbox Code Playgroud)
在Lucee中,我用作数据源:Microsoft SQL Server(供应商Microsoft),称为“一个”
这是我的测试应用程序:
<cfset Form.Field1 = "Field1">
<cfset Form.Field2 = "Field2">
<cfoutput>
<cfinsert datasource="one"
tablename="LuceeTest01"
formfields="Field1, Field2">
</cfoutput>
Run Code Online (Sandbox Code Playgroud)
当我运行它时,我得到同样的错误。知道为什么吗?完整的跟踪在这里:https : //justpaste.it/6k0hw
谢谢!
编辑1:很
好奇。我尝试使用“用于MS SQL Server和Sybase的jTDS Type 4 JDBC驱动程序”作为数据源驱动程序,现在错误是:
对象限定符的数据库名称部分必须是当前数据库的名称。
这可以追溯到以下语句:
{call []..sp_columns 'LuceeTest01', '', '', 'null', 3}
Run Code Online (Sandbox Code Playgroud)
当我在Microsoft SQL Server Management Studio中尝试此操作时,出现相同的错误。但是,当我指定数据库名称(“ one”作为第三个参数)时,MS SQL SMS中没有错误。
EXEC sp_columns 'LuceeTest01', '', 'one', 'null', 3
Run Code Online (Sandbox Code Playgroud)
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">
Run Code Online (Sandbox Code Playgroud)
编辑3:
我 99% 确信这是 Lucee / JDK / JDBC 驱动程序错误,而不是您的配置中的错误。
来源:
我最初怀疑有一些容易实现的目标,例如“Field2”中的前导空白。然后我看到您的评论显示您已尝试进行修剪,并且您的 Edit1 在使用不同的数据库驱动程序时出现不同的错误。所以我开始尝试重现您的问题。
在 MS SQL Server 2016上Lucee 5.2.4.37,配备了示例代码和两个新数据源(jTDS (MSQL and Sybase)驱动程序和Microsoft SQL Server (JDBC4 - Vendor Microsoft)SQL 各一个),我无法在任一驱动程序上重现任一问题。即使有选择地取消各种数据库权限并更改 SQL 用户的默认数据库,我仍然只能强制不同的(预期的)错误,而不是您的错误。
一旦我点击管理员更新Lucee 5.3.3.62并重新运行测试,我就遇到了相应数据源的两个错误,数据库权限、数据源配置或示例代码没有其他更改。
祝你好运,让 Lucee 的人相信这个轶事证据是一个错误的证据,但如果你需要额外的声音,请给我打电话。虽然我不在自己的代码中使用 cfinsert/cfupdate,但我最近一直在支持听起来规模和性质相似的遗留 CF 应用程序,并同情围绕重构或现代化的逻辑挑战!
编辑:
我tablequalifier在上面的评论中尝试了@Redtopia 的建议。仅添加 tablequalifier 属性对我来说对任何一个数据库驱动程序都不起作用。
使用两者tablequalifier="dbname",tableowner="dbo"仍然对我的 MS SQL Server 驱动程序不起作用,但似乎对 jTDS 驱动程序起作用,因此这是一种可能的解决方法,意味着更改标签的每次出现,因此理想情况下,Lucee 人员能够修复如果 Lucee 本身没有破坏它,则可以确定是哪个 Java 更新破坏了它。
| 归档时间: |
|
| 查看次数: |
99 次 |
| 最近记录: |