gpt4 book ai didi

c# - SqlParameter 不存储错误的 BIT 值

转载 作者:行者123 更新时间:2023-11-30 22:03:49 26 4
gpt4 key购买 nike

看来我需要帮助才能弄清这应该是一个简单的问题。我正在更新一些现有代码,并且我有一个具有可为空参数并更新表的存储过程。

示例 SP 参数

       ,@Paid bit = NULL
,@Despatched bit = NULL

SP 代码示例

  ,Paid = ISNULL(@Paid, Paid)
,Despatched = ISNULL(@Despatched, Despatched)
,MarkedAsPaid = ISNULL(@MarkedAsPaid, MarkedAsPaid)
,MarkedAsDespatched = ISNULL(@MarkedAsDespatched, MarkedAsDespatched)

C# 代码

   cmd.Parameters.Add(new SqlParameter("@Despatched", 0));
cmd.Parameters.Add(new SqlParameter("@Paid", 0));

if (request.ShippedDate != null && request.ShippedDate != DateTime.MinValue.ToString())
{
cmd.Parameters["@Despatched"].Value = 1;
}

if (request.PaymentMethod == "PayPal" && request.CheckOutStatus == "NoPaymentFailure")
{
cmd.Parameters["@Paid"].Value = 1;
}

当我运行这段代码和上面的代码时,如果条件不满足,字段值将保持原样(NULL),如果条件满足,字段将更新为 1。知道为什么在不满足条件时不将它们更新为 0 吗?

最佳答案

这一行

cmd.Parameters.Add(new SqlParameter("@Despatched", 0));

并不意味着传递的值是 0而是代表 SqlDbType 枚举值。。 (这是 BigInt)。自 0 is implicitly convertible to any enum type ,您看不到错误。

添加如下参数:

cmd.Parameters.Add(new SqlParameter("@Despatched",SqlDbType.Bit));

然后添加一个 else 语句,例如:

 if (request.ShippedDate != null && request.ShippedDate != DateTime.MinValue.ToString())
{
cmd.Parameters["@Despatched"].Value = 1;
}
else
{
cmd.Parameters["@Despatched"].Value = 0;
}

或者您可以保留当前代码并添加默认值,例如:

cmd.Parameters.Add(new SqlParameter("@Despatched",SqlDbType.Bit){ Value = 0 });

关于c# - SqlParameter 不存储错误的 BIT 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25745515/

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