【发布时间】:2009-05-08 14:14:24
【问题描述】:
我正在尝试使用 ColdFusion 将表单字段中的值插入 SQL Server MONEY 字段。如果金额只是美元,或者美分超过 12,则插入没问题。
但是如果美分金额小于 12,根据引发的错误,系统似乎在插入之前将金额转换为日期格式,而我没有要求这样做。然后,当然,它出错了,因为我试图在 MONEY 字段中插入一个日期。 (!)
我尝试使用类型为 CF_SQL_DECIMAL 的 CFQUERYPARAM,但这不起作用。任何想法将不胜感激。
这是表单代码:
<CFFORM ACTION="_execute_project_payment.cfm?action=Add" METHOD="post" NAME="FormX">
<CFOUTPUT>
<INPUT TYPE="hidden" NAME="projectID" VALUE="#projectID#">
<TR>
<TD CLASS="label" ALIGN="right" VALIGN="top">Payments:</TD>
<TD>
$<CFINPUT NAME="payment" TYPE="TEXT" VALIDATE="FLOAT" SIZE="15" REQUIRED="YES" MESSAGE="You must enter a payment amount."> Date:
<CFINPUT TYPE="text" name="payment_date" id="payment_date" SIZE="12" VALIDATE="DATE" REQUIRED="YES" MESSAGE="You must enter a payment date.">
<img src="cal_icon.gif" id="trigger_payment_date"
style="cursor: pointer; border: 0px;"
title="Date selector"
onmouseover="this.style.background=’red’;"
onmouseout="this.style.background=’’" />
<script type="text/javascript">
Calendar.setup({
inputField : "payment_date",
ifFormat : "%m/%d/%Y",
button : "trigger_payment_date",
align : "Tl",
singleClick : false
});
</script>
<INPUT TYPE="Submit" VALUE="Add">
<BR>
</TD>
</TR>
</CFOUTPUT>
</CFFORM>
这是插入:
<CFSET paydateODBC = CreateODBCDate(FORM.payment_date)>
<CFQUERY NAME="add_project_payment" DATASOURCE="#dsource#" USERNAME="#usern#" PASSWORD="#passw#">
INSERT INTO project_payments (
projectID,
payment,
payment_date
)
VALUES (
#projectID#,
#FORM.Payment#,
#paydateODBC#
)
</CFQUERY>
这是错误,尝试输入 666.10 作为付款:
[Macromedia][SQLServer JDBC Driver][SQLServer]Conversion failed when converting datetime from character string.
The error occurred in C:\Websites\qrpqiy\toubltracker\_execute_project_payment.cfm: line 21
19 : #projectID#,
20 : #FORM.payment#,
21 : #paydateODBC#
22 : )
23 : </CFQUERY>
SQLSTATE 22007
SQL INSERT INTO project_payments ( projectID, payment, payment_date ) VALUES ( 433, {d '0666-10-01'}, {d '2009-05-15'} )
VENDORERRORCODE 241
【问题讨论】:
-
我看到您的问题已解决,但我想建议所有查询输入和参数使用 cfqueryparam,否则您将面临 SQL 注入攻击。
标签: sql-server coldfusion