gpt4 book ai didi

c# - 为什么这个存储过程不更新数据库中的数据?

转载 作者:行者123 更新时间:2023-11-30 21:01:44 25 4
gpt4 key购买 nike

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

C#代码

using (SqlTransaction sqlTrans = con.BeginTransaction())
{
using (SqlCommand AdjustTax = new SqlCommand("GP_SOP_AdjustTax", con, sqlTrans))
{
try
{
AdjustTax.CommandType = CommandType.StoredProcedure;
AdjustTax.Parameters.Add("@IN_SOPType", SqlDbType.Int).Value = 3;
AdjustTax.Parameters.Add("@IN_SOPNo", SqlDbType.VarChar).Value = "stdinv2278";
AdjustTax.Parameters.Add("@IN_AdjustAmount", SqlDbType.Int).Value = 0.04;
AdjustTax.Parameters.Add("@O_iError", SqlDbType.Int, 250);
AdjustTax.Parameters["@O_iError"].Direction = ParameterDirection.Output;

if (con == null || con.State == ConnectionState.Closed)
{
con.Open();
}

AdjustTax.ExecuteNonQuery();
int Error = (int)AdjustTax.Parameters["@O_iError"].Value;

if (Error == 0)
{
MessageBox.Show("Tax is Adjusted");
}
if (Error != 0)
{
MessageBox.Show("Error No:" + Error1);
}

sqlTrans.Commit();
}

catch (Exception ex)
{
MessageBox.Show(ex.Message);
sqlTrans.Rollback();
}

finally
{
con.Close();
}
}
}

SQL 服务器代码

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

编辑
DecimalNumeric Sql 类型的正确映射,如 explained here .

关于c# - 为什么这个存储过程不更新数据库中的数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13909230/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com