2016-07-05 5 views
0
을 사용하여 업데이트 할 수 없습니다.

간단한 질문 만하고 Microsoft SQL Server 2014 Express를 사용하고 있습니다. 이제 레코드를 만들고 숫자 값이 포함 된 레코드를 업데이트하는 두 가지 함수가 있습니다.SQL Server 숫자를 만들 수 있지만 C#

몇 가지 알려지지 않은 이유 때문에 소수점 (예 : 50.50) 뒤에 0보다 큰 숫자를 사용하여 레코드를 만들 수 있지만이 레코드를 숫자 값으로 업데이트하려고하면 내 구문 소수점 뒤에 잘못되었습니다. 그래서 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이 알아서 무엇보다도, 당신은 쿼리 매개 변수를 사용하여 삽입 쿼리에서이 값

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에서와 같이 문자열에 연결되면 ToString 메서드를 사용하여 문자열로 변환됩니다. 로캘에서 ToString 메서드는 소수점이 쉼표로 표시되는 문자 시퀀스를 생성합니다. 그리고 이것은 SQL 텍스트로 혼란을 야기합니다. 해결책은 간단합니다. 추가로 사용하는 매개 변수 사용 – Steve

답변

1

위해 생성됩니다 : 여기

내 두 가지 기능이 있습니다 10 진수 값을 올바르게 형식화해야합니다.

쿼리를 업데이트 할 때 문자열 연결을 사용하여 10 진수를 쿼리에 추가합니다. 가장 확실한 것은 현재 문화권이 소수점을 점이 아니라 쉼표로 형식화하여 구문이 잘못된 쿼리가 생성된다는 것입니다.

그래서

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

의 과제가

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

대신

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

같은 문자열 발생합니다 사용하면 삽입이 문제에 같은 쿼리를 매개 변수화 - 그리고 당신이 아직 눈치 채지 못한 많은 다른 잠재적 인 사람들은 사라질 것입니다.

+0

지금은 완벽하게 작동하는 매개 변수가있는 업데이트를 사용하여 도움을 주셔서 감사합니다. – Patrick