J'essaie d'insérer une valeur d'un champ de formulaire dans un champ SQL Server MONEY à l'aide de ColdFusion. Si le montant est juste en dollars, ou si les cents sont plus de 12, l'insertion se passe bien.ColdFusion - Insertion d'un champ de formulaire dans SQL Server MONEY
Mais si le montant en cents est inférieur à 12, en fonction de l'erreur qui est lancée, le système semble convertir le montant en argent dans un format de date avant l'insertion, sans que je le demande. Et puis, bien sûr, il y a des erreurs, parce que j'essaie d'insérer une date dans un champ MONEY. (!)
J'ai essayé d'utiliser CFQUERYPARAM avec le type CF_SQL_DECIMAL, mais cela n'a pas fonctionné. Toutes les pensées seraient grandement appréciées.
est ici le code de formulaire:
<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>
Et voici l'insert:
<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>
Et voici l'erreur, en essayant d'entrer 666,10 comme le paiement:
[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
Je vois votre problème est résolu, mais je voudrais suggérer cfqueryparam pour toutes les entrées et paramètres de requête ou bien vous vous exposez à des attaques par injection SQL. – Jayson