Juste une simple question rapide, j'utilise Microsoft SQL Server 2014 Express et maintenant j'ai deux fonctions pour créer un enregistrement et mettre à jour un enregistrement contenant une valeur numérique. Pour une raison inconnue, je peux créer l'enregistrement en utilisant une valeur numérique avec un nombre supérieur à 0 après le point décimal (comme 50.50), cependant, en essayant de mettre à jour cet enregistrement avec la valeur numérique, il dit juste que ma syntaxe est faux après le point décimal. Donc tl, dr (50,00 fonctionne, 50,50 ou quelque chose comme ça, ne fait pas).SQL Server Numeric, peut créer mais pas mettre à jour en utilisant C#
Ma question est maintenant: qu'est-ce que je fais mal?
Voici mes deux fonctions:
public static void UpdateProduct(int id, string name, decimal price)
{
try
{
string query = "UPDATE dbo.Products SET Name = '" + name + "' , Price = " + price + " WHERE ProductID = " + id;
SqlCommand command = new SqlCommand(query, connection);
command.ExecuteNonQuery();
}
catch (SqlException e)
{
Console.WriteLine(e.Message);
}
}
public static void AddProduct(string name, decimal price)
{
string query = "INSERT INTO dbo.Products (Name, Price) VALUES (@name, @price)";
SqlCommand command = new SqlCommand(query, connection);
command.Parameters.AddWithValue("@name", name);
command.Parameters.AddWithValue("@price", price);
command.ExecuteNonQuery();
}
Et voici mon SQL créer pour cette valeur
create Table Products
(
ProductID INT IDENTITY(1,1) PRIMARY key,
Name VARCHAR(255) NOT NULL,
Price NUMERIC(5,2) NOT NULL,
Active BIT DEFAULT 1
);
Les paramètres SQL fonctionnent également pour les requêtes UPDATE (mais utilisent Add plutôt que AddWithValue). – Plutonix
Vous pouvez lire [Pouvons-nous arrêter d'utiliser AddWithValue() déjà?] (Http://blogs.msmvps.com/jcoehoorn/blog/2014/05/12/can-we-stop-using-addwithvalue-already/ – juharr
C'est simple. Lorsque la décimale est concaténée à une chaîne comme vous le faites dans la commande UPDATE, elle est convertie en chaîne à l'aide de la méthode ToString. Dans votre environnement local, la méthode ToString produit une séquence de caractères où le point décimal est représenté par une virgule. Et cela fait des ravages avec votre texte sql. La solution est simple. Utilisez les paramètres comme dans – Steve