3

J'utilise des paramètres de sortie pour renvoyer des valeurs d'une procédure stockée.Paramètre de sortie de procédure stockée renvoyant une valeur arrondie

Déclaration

procédure stockée est: @GrandTtl DECIMAL(19,3) OUT

La requête SELECT est:

SET @GrandTtl = (SELECT TOP 1 Bill_Amount 
       FROM Tbl_Restaurant_Kitchen_Order_Bill_Details 
       WHERE Bill_Number = @billno) 

Par exemple, la requête select renvoie la valeur 4087.67 la valeur du paramètre de sortie est retourné comme 4088 de SQL Server C#.

Voici le code C# appelant la procédure stockée:

SqlCommand cmd = new SqlCommand("Sp_RestCC_BillDetails", con); 
cmd.CommandType = CommandType.StoredProcedure; 

SqlParameter OutParam26 = cmd.Parameters.Add("@GrandTtl", SqlDbType.Decimal,19); 

da = new SqlDataAdapter(cmd); 

con.Open(); 
da.Fill(ds, "dtRestCC_Items"); 
con.Close(); 

objRCCBEL.GrandTtlOut = Convert.ToDecimal(cmd.Parameters["@GrandTtl"].Value); 
+0

Pouvez-vous poster aussi le code C# qui appelle cette procédure? – InSane

Répondre

10

Vous devez configurer le paramètre C# comme

  1. sortie - évidemment, vous avez fait ce type décimal
  2. , avec une bonne échelle/compatible

SqlParameter parm = new SqlParameter("@GrandTtl", SqlDbType.Decimal); 
parm.Precision = 19; 
parm.Scale = 3; 
parm.Direction = ParameterDirection.Output; 
cmd.Parameters.Add(parm); 

Si vous ne définissez pas l'échelle, la valeur par défaut est 0. Ref: SqlParameter.Scale Property

Le nombre de décimales auxquelles Value est résolu. La valeur par défaut est 0.

+0

Cela fonctionne pour moi merci. Mais pouvons-nous placer le 'Précision' et 'Échelle' dans la ligne de source ?? comme 'SqlDbType.Decimal, 19.3);' quelque chose comme ça ??? –

+0

Vous auriez besoin de cette version du constructeur SqlParameter: http://msdn.microsoft.com/en-us/library/5a10hy4y.aspx Suivez simplement l'exemple C# sur la page – RichardTheKiwi

0

Selon Microsoft décimal (p, s) devrait travailler pour vous. Les types money et smallmoneyt ne sont qu'un sous-ensemble décimal avec une précision de 4 places. Donc, je pense que votre problème vient du type de la variable qui est liée au paramètre OUT en C#.

+0

J'utilise décimal pour définir comme outparameter. J'ai aussi essayé double mais le même problème persiste –

Questions connexes