2013-06-08 3 views
0

Je n'arrive pas à obtenir ma base de données sql pour accepter un nombre décimal d'une zone de texte sur la page de mon site Web. Lorsque je saisis un nombre entier, il n'y a pas de problème, ce n'est que lorsque j'entre un nombre décimal (123,45) que j'ai le problème. J'ai essayé double.parse(textbox.text) et decimal.parse(textbox.text) en vain.Impossible d'insérer la décimale de la zone de texte dans la base de données

Je reçois le message d'erreur

chaîne d'entrée

n'a pas été dans le bon format

Ma déclaration d'insertion est ci-dessous:

"INSERT INTO Transactions (Date, Account, Payee, Chq_Num, Reference, GST_Rate, 
Amount, Document_Number, Bank_Account) VALUES ('" & yy & "-" & mm & "-" & dd & 
"','" & DropDownList3.SelectedValue & "','" & TextBox3.Text & "','" & 
TextBox5.Text & "','" & TextBox4.Text & "'," & DropDownList2.SelectedValue & 
"," & Double.Parse(TextBox6.Text) & "," & TextBox27.Text & ",'" & 
DropDownList1.SelectedValue & "'); INSERT INTO Cash (Date, Bank_Account, 
Amount, Document_Number) VALUES ('" & yy & "-" & mm & "-" & dd & "','" & 
DropDownList1.SelectedValue & "'," & Double.Parse(TextBox2.Text) & "," & 
TextBox27.Text & ");" 

Mon champ de base de données est réglé sur décimal (18,2) Des idées?

+3

[SQL alerte d'injection] (http://msdn.microsoft.com/en-us/library/ms161953%28v=sql.105%29.aspx) - vous devez ** ** non concaténer ensemble vos instructions SQL - utilisez ** requêtes paramétrées ** à la place pour éviter l'injection SQL –

+2

Pour ne pas être mesquine, mais pour votre propre bon sens, vous devriez probablement aussi nommer les zones de texte. – logixologist

Répondre

0

Votre message d'erreur indique que la chaîne d'entrée n'était pas au format correct. Signifie que vous essayez de convertir une valeur incorrecte en décimal. Faites un essai/catch autour du code pour voir ce qui est passé à ParseDouble. Cela devrait aider à déterminer ce qui cause le problème et cela devrait aider à déterminer d'où il vient. Un utilisateur l'entre-t-il dans une zone de texte?

Veuillez essayer "double.TryParse" à la place de "Double.Parse".

double temp = 0; 
if (double.TryParse("123.456", out temp) 
{ 
    Console.WriteLine(string.Format("Parsed temp: {0}", temp); 
} 
else 
{ 
    Console.WriteLine("Input value was not able to be parsed."); 
} 
+0

oui l'utilisateur l'entre dans une zone de texte – user2301960

+0

Il s'avère que ce n'était pas la zone de texte elle-même, mais une autre validation que je faisais c'était faux, merci pour votre aide Sain Pradeep, m'a indiqué dans la bonne direction – user2301960

Questions connexes