【发布时间】:2023-03-12 15:50:01
【问题描述】:
我正在尝试调用一个将十进制值返回到我的 C# 网站的函数。当我在 SQL Server 中调用该函数时,会出现尾随十进制值。但是当它被传递到 C# 中时,后面的小数会丢失。
这是我正在调用的 SQL Server 存储过程:
declare @MonthlyTotal as decimal(10,2)
set @MonthlyTotal=(select cast((Linetotal * Subtotal) as decimal(10,2)))
return @MonthlyTotal
在我的 C# 服务器代码中,我收到了存储过程值。但它不带有尾随小数。
SqlConnection sqlConnection = new SqlConnection(Connection);
SqlCommand cmd4 = new SqlCommand();
cmd4.Connection = sqlConnection;
cmd4.CommandType = CommandType.StoredProcedure;
cmd4.CommandText = "GetTBSMonthlyTotalService";
SqlParameter JobParam = new SqlParameter("MonthlyTotal", SqlDbType.Decimal, 10);
JobParam.Precision = 10;
JobParam.Scale = 2;
JobParam.Direction = ParameterDirection.ReturnValue;
cmd4.Parameters.Add(JobParam);
try
{
sqlConnection.Open();
}
catch (Exception err)
{
Console.WriteLine(err.Message);
}
cmd4.ExecuteNonQuery();
double ID = Double.Parse((cmd4.Parameters[0].Value.ToString()));
sqlConnection.Close();
return ID;
【问题讨论】:
-
您使用的是 double,
decimal应该映射到 .Net 框架中的decimal类型。还有它们的尾随值是什么.00? -
尾随值不是 00。在这种特殊情况下,它们是
.44。所以我也应该将我的 C# 值更改为Decimal? -
@MethodMan 我正在使用 SqlParameter.Percision
-
@ChaseErnst 也许您需要重新评估这一行并使用正确的数据类型
double ID = Double.Parse((cmd4.Parameters[0].Value.ToString())); -
存储过程的 返回值 必须始终为 INT - 并且它应该用作错误(或:无错误)指示器。如果要返回十进制值 - 使用存储过程中的
OUTPUT参数或SELECT语句
标签: c# sql asp.net sql-server