Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么此存储过程不更新数据库中的数据?_C#_Sql_Stored Procedures - Fatal编程技术网

C# 为什么此存储过程不更新数据库中的数据?

C# 为什么此存储过程不更新数据库中的数据?,c#,sql,stored-procedures,C#,Sql,Stored Procedures,我正在运行一个带有硬编码值的存储过程。命令成功执行,没有任何错误。但数据库中的数据没有更新。如果使用SQL Server运行该存储过程,则数据正在更新。我犯了什么错 C#代码 SQL Server代码 DECLARE @return_value int, @O_iError int EXEC @return_value = [dbo].[GP_SOP_AdjustTax] @IN_SOPType = 3, @IN_SOPNo

我正在运行一个带有硬编码值的存储过程。命令成功执行,没有任何错误。但数据库中的数据没有更新。如果使用SQL Server运行该存储过程,则数据正在更新。我犯了什么错

C#代码

SQL Server代码

DECLARE @return_value int,
        @O_iError int

EXEC    @return_value = [dbo].[GP_SOP_AdjustTax]    
        @IN_SOPType = 3,   
        @IN_SOPNo = 'stdinv2278',    
        @IN_AdjustAmount = 0.04,    
        @O_iError = @O_iError OUTPUT

SELECT  @O_iError as N'@O_iError'

SELECT  'Return Value' = @return_value

GO

我认为问题是由这条线引起的:

AdjustTax.Parameters.Add("@IN_AdjustAmount", SqlDbType.Int).Value = 0.04;
因为类型是
SqlDbType.Int
,并且您要传递0.04,所以该值很可能会四舍五入到0。在看不到实际存储过程的内容的情况下,我只能猜测为该参数传入一个值0会导致存储过程跳过更新,或者存储过程所做的计算会导致该列更新为它原来拥有的相同值

我会尝试将该行更改为:

AdjustTax.Parameters.Add("@IN_AdjustAmount", SqlDbType.Decimal).Value = 0.04M
编辑

Decimal
Numeric
Sql类型的正确映射,如。

我认为问题是由以下行引起的:

AdjustTax.Parameters.Add("@IN_AdjustAmount", SqlDbType.Int).Value = 0.04;
因为类型是
SqlDbType.Int
,并且您要传递0.04,所以该值很可能会四舍五入到0。在看不到实际存储过程的内容的情况下,我只能猜测为该参数传入一个值0会导致存储过程跳过更新,或者存储过程所做的计算会导致该列更新为它原来拥有的相同值

我会尝试将该行更改为:

AdjustTax.Parameters.Add("@IN_AdjustAmount", SqlDbType.Decimal).Value = 0.04M
编辑
Decimal
Numeric
Sql类型的正确映射,如。

尝试SqlDbType。Decimal:

AdjustTax.Parameters.Add("@IN_AdjustAmount", SqlDbType.Decimal).Value = 0.04;
请尝试SqlDbType.Decimal:

AdjustTax.Parameters.Add("@IN_AdjustAmount", SqlDbType.Decimal).Value = 0.04;

请确认第三个输入参数的DB Type Int,即@IN_adjustAmount谢谢回复。类型为numaricIf类型为numaric..那么我在c代码中设置了哪种类型。请确认第三个输入参数的DB type Int,即@in_adjustamount谢谢回复。类型为numaric类型为numaric..那么我在c代码中设置了哪种类型。请告诉我为什么包含“M”(0.04M)。
M
仅表示
十进制。请看这里:让我知道为什么包含“M”(0.04M)。
M
仅表示
decimal
。请看这里: