检查数据库值因数据库中为空值而不能工作

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (166)

我正在尝试执行一个DELETE,但是在尝试删除之前,我需要确保存在一个值。该值将从数据库中提取。我需要检查dbnull。如果不是,那么删除可以继续进行。我试过以下几种方法,但都不起作用:

if (!DBNull.Value.Equals(x.ColourImage))
{
    File.Delete(HttpContext.Current.Server.MapPath(x.ColourImage));
}

当我尝试时,我得到以下例外:

内部异常类型:System.InvalidCastException无法将‘System.DBNull’类型的对象转换为‘System.String’。_内部堆栈跟踪:在Products.GetAllProdColoursRow.get_c:\user\Micha\AppData\Local\temp\临时ASP.NET文件\vs\d9cd3740\a9faac06\App中的colouriage()_Code.bvtnyzaw.2.cs:第2245行undefined异常类型:System.Data.StrongTypingException异常:表‘GetAllProdColres’中列‘colouriage’的值为DBNull。

我已经看到了提出的问题,但这些解决办法似乎都没有帮助。不管我怎么尝试,我都得到了同样的例外。

我的完整代码使用建议的答案,但我还是得到了相同的异常。

public bool DeleteProductColour(int colid, int prd)
{
    bool prodColourDeleted = false;
    try
    {
        var x = pcAdp.GetAllProdColours(prd).AsEnumerable().Where(y => y.ColourId == colid).First();

        if (x != null && !string.IsNullOrEmpty(x.ColourImage))
        {
            File.Delete(HttpContext.Current.Server.MapPath(x.ColourImage));
        }
        pcAdp.DeleteProductColour(colid);
        prodColourDeleted = true;
    }
    catch(Exception er)
    {
        ExceptionUtility.LogException(er, "Delete product colour - ProductsBLL");
    }
    return prodColourDeleted;
}

*更新*

我尝试了以下方法,但得到了一个例外:public bool DeleteProductColour(int colid,int prd){bool prodcolourDel碱基=false;尝试{var x=pcAdp.GetAllProdColors(PRD).ToList();

        if (x.Any())
        {
            var colour = x.Where(y => y.ColourId == colid).FirstOrDefault();

            if (colour != null && !string.IsNullOrEmpty(colour.ColourImage))
            {
                File.Delete(HttpContext.Current.Server.MapPath(colour.ColourImage));
            }
        }
        pcAdp.DeleteProductColour(colid);
        prodColourDeleted = true;

    }
    catch (Exception er)
    {
        ExceptionUtility.LogException(er, "Delete product colour - ProductsBLL");
    }
    return prodColourDeleted;

}

我得到的例外是

“Product.ColourImage”抛出了‘System.Data.StrongTypingException’类型的异常

提问于
用户回答回答于

使用

if(!string.IsnullOrEmpty(x.ColourImage)){}

如果仍有错误,则需要检查x为空或不为空;

if(x!=null&&!string.IsnullOrEmpty(x.ColourImage)){}

或者另一种选择是可行的;

if(x.ColourImage!= DBNull.Value){}

/我认为这种方法可能是可行的

 public bool DeleteProductColour(int colid, int prd)
    {
        bool prodColourDeleted = false;
        try
        {
            var x = pcAdp.GetAllProdColours(prd).AsEnumerable().Where(y => y.ColourId == colid).FirstOrDefault();

            if (x != null && !string.IsnullOrEmpty(x.ColourImage))
            {
                File.Delete(HttpContext.Current.Server.MapPath(x.ColourImage));
            }
            pcAdp.DeleteProductColour(colid);
            prodColourDeleted = true;
        }
        catch(Exception er)
        {
            ExceptionUtility.LogException(er, "Delete product colour - ProductsBLL");
        }
        return prodColourDeleted;
    }
用户回答回答于

在强类型DataSet这种问题就会发生。

可能在填上你的Dataset,得到相应的DataColumn并设置DataColumn.AllowDBNull敬真。

https://msdn.microsoft.com/en-us/library/system.data.datacolumn.allowdbnull(v=vs.110).aspx

扫码关注云+社区

领取腾讯云代金券