首页 > 解决方案 > 将空字符串转换为数字时出现 DBnull 问题

问题描述

您好,我正在尝试与 Oracle 连接并作为存储过程的一部分发送参数。我的两个参数以空字符串的形式出现,因此我需要传递空值,但数据类型在 db 端设置为数字。当我运行脚本时,它会给我错误“对象不能从 DBNull 转换为其他类型”。

这是我的代码片段,记住字符串 Case,字符串 SRE_Pricing 以 "" 的形式出现。因此,如果文本中有任何内容,例如 "52" 并且如果 "" 则分配 DB null,我需要将其转换为数字。

 OracleParameter CaseParam = new OracleParameter("arg_CASE_NUMBER", OracleType.Number);
                CaseParam.Direction = ParameterDirection.Input;
                if (Case != null || Case!="")
                {
                    CaseParam.Value = Convert.ToInt32((Case.Equals(string.Empty)) ? (object)DBNull.Value : Case);
                }
                else
                {
                    CaseParam.Value = DBNull.Value;
                }
                //CaseParam.Value =Convert.ToInt32(Case);
                cmd.Parameters.Add(CaseParam);

                OracleParameter SRE_pricingParam = new OracleParameter("arg_SRE_PRICING_ELEMENT", OracleType.Number);
                SRE_pricingParam.Direction = ParameterDirection.Input;
                if (SRE_Pricing != null || SRE_Pricing != "")
                {
                    SRE_pricingParam.Value = Convert.ToInt32((SRE_Pricing.Equals(string.Empty)) ? (object)DBNull.Value : SRE_Pricing);
                }
                else
                {
                    SRE_pricingParam.Value = DBNull.Value;
                }
                //SRE_pricingParam.Value = Convert.ToInt32(SRE_Pricing);
                cmd.Parameters.Add(SRE_pricingParam);

在此处输入图像描述

标签: asp.net

解决方案


您需要在条件中使用&&运算符而不是||if

if (SRE_Pricing != null && SRE_Pricing != "")
{
    SRE_pricingParam.Value = Convert.ToInt32(SRE_Pricing);
}
else
{
    SRE_pricingParam.Value = DBNull.Value;
}

更好用Int32.TryParse()

int price;
if (Int32.TryParse(SRE_Pricing, out price))
{
    SRE_pricingParam.Value = price;
}
else
{
    SRE_pricingParam.Value = DBNull.Value;
}

推荐阅读