我有一个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)。我还能如何调试或修复?
答案 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)