我遇到負數小數問題。在SQL Server小數點列中插入負值拋出錯誤
在我定義price
爲decimal(8,2) NULL
一個SQL Server數據庫的代碼。我正在使用C#:
string query = string.Format("INSERT INTO ticket_elements " +
"(ticket_id, product_name, price, tax, amount) " +
VALUES ({0}, '{1}', '{2}', '{3}', '{4}'); SELECT SCOPE_IDENTITY();",
ticket_id, pro2.ProductName, tPrice, tax, fixedAmountStr);
當{2}
且價格不負值,那麼它工作正常,但當我把價格定像-0.25
那麼它給這個錯誤:
Arithmetic Overflow on converting varchar in numeric-datatype.
做什麼我需要做在db中使用負值?
更新:
但以下代碼正常工作正負值或正值。
我真的很困惑。
string query = string.Format("INSERT INTO tickets " +
"(registration_date, cancellation, cancellation_date, total_products, total_gross_price, total_net_price, pay_type, user_id, client_id)" +
" VALUES ('{0}', '{1}', '{2}', '{3}', '{4}', '{5}', '{6}', {7}, {8});" +
" SELECT SCOPE_IDENTITY();", regData, "False", "", this.TotalProducts, totalGrossPrice, totalNetPrice, this.PayType, this.CashierId, this.ClientId);
您將每個參數的字符串傳遞給EVERYTHING。餿主意。更好的方法是使用參數化查詢(如Testujin指出的那樣),或者確保任何非字符串值都以文本形式傳入(SQL將根據列推斷出該類型)。換句話說,在您的價格,稅金和金額欄參數(例如'{2},{3},{4}',而不是'{2}','{3}','' {4}'') – SPFiredrake 2012-07-26 16:35:40
仍然只適用於正數。順便說一句。 2.代碼部分的工作原理和1.一個不..我真的很厭倦 – 2012-07-26 16:41:35
然後,我假設你的一列(價格,稅收,金額)沒有指定小數。檢查以確保它們都不是以DECIMAL(#,0)或NUMERIC(#,0)創建的。無論哪種方式,這些列應該是MONEY數據類型。 – SPFiredrake 2012-07-26 16:44:35