2014-01-07 44 views
-1

我在存儲過程中遇到問題。不要在SQL Server存儲過程中強制輪迴

在C#我有以下變量:

decimal ART12 = 10547,42; 

和在存儲過程中,我有這樣的代碼:

@ART12 DECIMAL(18,2) = 0; 

INSERT INTO #tmp (articolo, totale) 
VALUES('12',@ART12) 

#tmp具有這種結構:

CREATE TABLE #tmp 
(
    articolo varchar(10) null 
    ,finoa varchar(50) null 
    ,parametro varchar(30) null 
    ,quantita decimal(18,2) null 
    ,totale decimal(18,2) null 
    ,annoesercizio int null 
    ,idcompagnia int null 
    ,idagenzia int null 
    ,idagente int null 
    ,progressivogestione int null 
) 

當我將變量ART12的值發送到存儲過程時,這是舍入自動。如果值爲10547,42,則代碼返回10547,00。但我需要10547,42!

任何解決方案? 非常感謝。

- 更新 - 這是funcion的C#代碼

SqlConnection sqlConn = new SqlConnection(m_connString); 
sqlConn.Open(); 

SqlCommand cmd = new SqlCommand(); 
cmd.Connection = sqlConn; 
cmd.CommandType = CommandType.StoredProcedure; 
cmd.CommandText = "sp_GetElencoArt00_Riepilogo"; 

SqlParameter spPars32 = new SqlParameter(); 
spPars32.ParameterName = "@ART12"; 
spPars32.SqlDbType = SqlDbType.Decimal; 
spPars32.Value = ART12; 
cmd.Parameters.Add(spPars32); 

DataSet ds = new DataSet(); 
SqlDataAdapter da = new SqlDataAdapter(); 

     da.SelectCommand = cmd; 
     da.Fill(ds); 

     sqlConn.Close(); 
     sqlConn.Dispose(); 
     SqlConnection.ClearPool(sqlConn); 
     sqlConn = null; 

     return ds; 
+1

你是如何變量的值傳遞給存儲過程? –

+1

某處某處不尊重小數位數,但它不在您迄今向我們顯示的代碼片段中。因此,我們需要查看通過ADO傳遞參數的代碼以及存儲過程中對@ @ ART12的任何更改。 –

+3

您是否嘗試過使用'10547.42'而不是'10457,42'?什麼是參數的數據類型? –

回答

4

如下使用SqlParameter,設置精密規模

SqlParameter parameter = new SqlParameter("@ART12", SqlDbType.Decimal); 
parameter.Precision = 18; 
parameter.Scale = 2; 
parameter.Value = 10547.42m; // or set value from ART12 
cmd.Parameters.Add(parameter); 
+0

它的工作原理! :D 非常感謝! – Andryx93