【问题标题】:Coldfusion SQL Server giving The hexadecimal string is invalidColdfusion SQL Server 给出的十六进制字符串无效
【发布时间】:2013-02-19 15:54:39
【问题描述】:

我收到此错误 -

[Macromedia][SQLServer JDBC Driver]The hexadecimal string is invalid

当我运行以下查询时 -

<cfquery datasource="#getDatasource()#" name="qryAdminActivity">
    select * from v2_admin_activity
      where adminId = <cfqueryparam cfsqltype="cf_sql_numeric" value="#arguments.adminId#"> 
</cfquery>

数据库中有问题的行是这样的

有人知道这里出了什么问题吗?

::::编辑::::

我发现问题出在数据库中的这个字符串 -

&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt; &lt;activities&gt;&lt;activity&gt;&lt;date&gt;{ts &apos;2013-02-19 16:36:43&apos;}&lt;/date&gt;&lt;query&gt;Test,,,1,2013-02-19 16:36:43.625,1&lt;/query&gt;&lt;className&gt;moduleDAO&lt;/className&gt;&lt;functionName&gt;addNewSubModule&lt;/functionName&gt;&lt;type&gt;Add&lt;/type&gt;&lt;/activity&gt;&lt;/activities&gt; 

现在谁能告诉我这有什么问题?

数据库中的列类型是varchar(max)

【问题讨论】:

  • = arguments.adminId 的值是多少?
  • 它是一个数值。在这种情况下是 8
  • 如果在 management studio 中运行查询是否运行成功?
  • 如何将该字符串隔离为罪魁祸首?我之所以这么问,是因为无论对我来说,这可能有什么问题都不会产生您所看到的错误消息。

标签: sql sql-server sql-server-2008 coldfusion coldfusion-9


【解决方案1】:

刚刚遇到同样的问题。这对我来说是一个 CF 查询缓存(虽然没有使用 cachedwithin)。

原因

在我的例子中,这是由于 SQL 表字段类型发生了变化。我错误地将字段设置为 varbinary,并继续处理 CFC(SQL 查询)和调用的方法,直到我遇到该错误 - 即使在将字段类型更改为 varchar 之后也是如此。

分辨率

只需在 cfquery 中输入任何内容,我在 where 语句中添加了愚蠢的 1=1,刷新了我的课程,瞧! 我现在要从我的查询中删除多余的文本。

希望这会有所帮助!

【讨论】:

    【解决方案2】:

    这个错误是发生在查询上还是结果显示上?您如何显示该查询的输出?它是否试图解析结果中的 XML?该 XML 有效吗?我发现在 SQL Server 中将 XML 存储为 XML 数据类型以外的任何数据类型有时会在尝试再次将其视为 XML 时导致问题。我想这将取决于您最终如何使用该 XML 字符串。

    我建议您处理每个动态 CF 变量,并用有效的硬编码值替换它们,直到您可以将其缩小到导致问题的那个。并尝试用另一个值替换数据库中的那个 xml。看起来它可能正在尝试将 varchar(max) 解析为 XML。

    【讨论】:

      【解决方案3】:

      原来,在从查询中删除 cfqueryparam 标记后,它开始工作了 -

      <cfqueryparam cfsqltype="cf_sql_numeric" value="#arguments.adminId#">
      

      adminId = #arguments.adminId#
      

      奇怪但有效。

      感谢大家的回答。

      【讨论】:

      • 小心这个。确保您没有为 SQL 注入敞开心扉。这是 cfqueryparam 的主要优点之一。尝试将其重新添加并使用 CF_SQL_INTEGER 作为 cfsqltype。 adminID 的 SQL 数据类型是什么?确保您的 adminID、cfsqltype 和 arguments.adminID 都是兼容的数据类型。
      • 很好看的肖恩。我这样做是为了快速修复客户端,但现在我将返回并使用 cf_sql_integer 进行此操作。
      猜你喜欢
      • 2012-11-24
      • 1970-01-01
      • 2020-05-01
      • 2018-04-18
      • 1970-01-01
      • 2010-10-04
      • 1970-01-01
      • 2016-01-07
      • 2019-07-27
      相关资源
      最近更新 更多