Web服务:十进制没有正确传递到数据库

时间:2014-05-29 21:56:11

标签: asp.net web-services decimal

我有一个Web服务,我可以看到0.03的数据成员被传递给Web服务,但该数据库只显示0.000。数据库中的列定义为DECIMAL(18,4)。业务类的数据成员定义为十进制。使用Visual Studio 2010,SQL Server 2008和.NET 4.0。为什么0.03出现在数据库列而不是0.000?

int createApp;

ShortSaleInvestorReviewServiceClient _service = new ShortSaleInvestorReviewServiceClient();

decimal currentInterestRate = txtCurrentInterestRate.Text != string.Empty ? Decimal.Parse(txtCurrentInterestRate.Text) : new decimal();

createApp = _service.UpdateShortSaleApplication(currentInterestRate);

通过LINQ的Web服务调用存储过程来更新表。


ALTER PROCEDURE [dbo].[UpdateShortSaleApplication]                 
@iShortSaleApplicationID int,   
@iCurrentInterestRate decimal,     

AS

UPDATE [ShortSaleApplications] SET [CurrentInterestRate] = @iCurrentInterestRate   

WHERE ShortSaleApplicationID = @iShortSaleApplicationID   

当我逐步完成上述代码时,我可以看到" 0.03"被传递到Web服务进入LINQ到存储过程。但数据库中的基础列显示" 0.0000"。数据库中的列定义为十进制(18,4)。我还能如何调试或修复?

1 个答案:

答案 0 :(得分:1)

您尚未在存储过程中设置十进制变量的精度和小数位数,而且它正在创建问题。

  

ALTER PROCEDURE [dbo].[UpdateShortSaleApplication]
@iShortSaleApplicationID int,
@iCurrentInterestRate decimal,

默认情况下,sql server采用精度18和0。Link

  

p(精度)   将存储的最小小数位总数,包括小数点的左侧和右侧。精度必须是从1到最大精度为38的值。默认精度为18。   s(规模)   将存储在小数点右侧的小数位数。从p中减去此数字以确定小数点左侧的最大位数。可以存储在小数点右侧的最大小数位数。比例必须是从0到p的值。只有在指定精度时才能指定比例。 默认比例为0; 因此,0< = s< = p。最大存储大小因精度而异。

将其更改为

  

数据库中的列定义为DECIMAL(18,4)