【问题标题】:Transfer image between SQL Server databases using UPDATE使用 UPDATE 在 SQL Server 数据库之间传输图像
【发布时间】:2014-01-21 23:50:29
【问题描述】:

图像已使用image 存储在另一台服务器中。我已经完成了一个查询来获取图像,现在我正在尝试使用 update 查询(也设置为 image)将它放入另一个表中。我收到错误消息“无法将 ByteArray 对象转换为字符串。”

<cfquery name="updateCuppms" datasource="db_PerformanceApp">
    UPDATE CUPPMS 
    SET    phoneNumber ='#GetUser.telephoneNumber#',
           email = '#GetUser.mail#'
          <cfif isdefined(#GetPic.Face#) >
             , picture = <cfqueryparam cfsqltype="cf_sql_blob" value="#GetPic.Face#">
          </cfif>
    WHERE  wken = #getEmployees.wken#
 </cfquery>

【问题讨论】:

  • 您使用的是 SQL Server 2000 吗?如果不是,为什么要使用 IMAGE(已弃用)而不是 VARBINARY(MAX)(未弃用,并且更易于使用,尤其是在这样的上下文中)>
  • FWIW,原始错误的原因是您误用了isDefined。 IsDefined 需要一个变量的name,即一个简单的字符串。通过在变量#GetPic.Face# 周围使用井号,您传递的是它的,它是二进制的。因此错误。现在已经说过..查询列总是存在的。所以IsDefined 无论如何都是错误的函数。正如您最终发现的那样,IsNull() 是要走的路:)

标签: sql-server database coldfusion coldfusion-9


【解决方案1】:

&lt;cfif isdefined(#GetPic.Face#) &gt; 给了我错误,所以将 if 语句更改为下面,现在它可以工作了。

<cfif not isnull(GetPic.Face)>
  ,picture = <cfqueryparam cfsqltype="cf_sql_blob" value="#GetPic.Face#">
</cfif>

【讨论】:

  • 仅供参考 - 您无需在 if 语句中使用 #。我已经更新了你的答案
  • 确保对所有的查询参数使用cfqueryparam。既可以保护数据库免受 sql 注入,又可以提高性能。
猜你喜欢
  • 2012-08-21
  • 2012-08-30
  • 1970-01-01
  • 1970-01-01
  • 2011-03-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多