2016-07-05 11 views
0

を使用して作成することはできますが、更新することはできません。簡単な質問だけで、Microsoft SQL Server 2014 Expressを使用しており、レコードを作成し数値を含むレコードを更新する2つの関数があります。SQL Serverの数値は、C#

いくつかの不明な理由により、小数点の後の数値が50.50より大きい数値を使用してレコードを作成できますが、このレコードを数値で更新しようとすると、小数点の後に間違っています。だからtl、dr(50.00作品、50.50かそのようなものはありません)。

私の質問は今です:私は間違っていますか?ここで

は私の二つの機能です:

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(); 
} 

そして、ここでは私のSQLは、この値のために他のものの間で、世話をする、あなたはクエリパラメータを使用して、あなたのINSERTクエリでは、

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 
); 
+5

SQLパラメータはUPDATEクエリに対しても機能しますが(AddWithValueではなくAddを使用します)。 – Plutonix

+5

[AddWithValue()の使用をやめることはできますか?](http://blogs.msmvps.com/jcoehoorn/blog/2014/05/12/can-we-stop-using-addwithueue-already/) ) – juharr

+3

それは簡単です。 UPDATEのように10進数を文字列に連結すると、ToStringメソッドを使用して文字列に変換されます。あなたのロケールでは、ToStringメソッドは、小数点がカンマで表される一連の文字を生成します。そして、これはあなたのSQLテキストを混乱させます。解決策は簡単です。 Addで行ったようなパラメータを使用する – Steve

答えて

1

を作成することですあなたの小数点の正しい書式設定の。

更新クエリでは、文字列連結を使用して10進数をクエリに追加します。確かに、あなたの現在の文化は小数点をポイントではなくカンマで書式化し、構文的に不正確なクエリになります。

UPDATE dbo.Products SET Name = 'somename' , Price = 50,5 WHERE ProductID = 3 

代わりの

UPDATE dbo.Products SET Name = 'somename' , Price = 50.5 WHERE ProductID = 3 

使用して挿入し、この問題のようにクエリをパラメータ化のようなので、

string query = "UPDATE dbo.Products SET Name = '" + name + "' , Price = " + price + " WHERE ProductID = " + id; 

のあなたの割り当ては、文字列になります - とあなたがまだ気づいていない多くの潜在的な他の人たちがなくなります。

+0

パラメータを使用した更新プログラムを使用して、今すぐ完璧に働きました。ありがとうございました。 – Patrick