asp.net - 将空字符串转换为数字时出现 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);
解决方案
您需要在条件中使用&&
运算符而不是||
if
if (SRE_Pricing != null && SRE_Pricing != "")
{
SRE_pricingParam.Value = Convert.ToInt32(SRE_Pricing);
}
else
{
SRE_pricingParam.Value = DBNull.Value;
}
int price;
if (Int32.TryParse(SRE_Pricing, out price))
{
SRE_pricingParam.Value = price;
}
else
{
SRE_pricingParam.Value = DBNull.Value;
}
推荐阅读
- c++ - ThreadSafeModule 构造函数异常
- go - 获取从 PubSub 事件触发的 Google Cloud Functions 的执行 ID
- android - 有没有办法将 okhttp 客户端与特定的网络类型绑定?
- python - 替换每对分隔符之间的文本
- list - 在 prolog 中列出操作
- pspdfkit - 许可证密钥是否需要互联网验证?
- archimate - 我应该使用哪个 Archimate 元素来为商店建模
- ios - 领域中有没有办法为嵌套对象实现 order_by
- python - 在多个 h5 文件上训练 ANN Keras(基于 Tensorflow)模型
- mysql - MySQL / MariaDB 生成安全序列