由于数据库

时间:2018-06-02 07:22:23

标签: c# asp.net sql-server

我正在尝试执行删除但我需要确保在尝试删除之前存在一个值。该值从数据库中提取。我需要检查dbnull。如果不是,则删除可以继续。我尝试了以下但它不起作用:

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

当我尝试时,我得到以下异常:

  

内部异常类型:System.InvalidCastException
  无法将类型为“System.DBNull”的对象强制转换为“System.String”   内部来源:App_Code.bvtnyzaw
  内部堆栈跟踪:
  at Products.GetAllProdColoursRow.get_ColourImage()in c:\ Users \ micha \ AppData \ Local \ Temp \ Temporary ASP.NET Files \ vs \ d9cd3740 \ a9faac06 \ App_Code.bvtnyzaw.2.cs:line 2245

     

异常类型:System.Data.StrongTypingException
  例外:表'GetAllProdColours'中'ColourImage'列的值是DBNull。

**** **** EDIT 我已经看到了建议的问题,但这些解决方案似乎都没有帮助。无论我尝试什么,我都会得到同样的例外。

****我的完整代码使用建议的答案,但我仍然得到相同的例外****

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 prodColourDeleted = false;         尝试         {             var x = pcAdp.GetAllProdColours(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'类型的异常

2 个答案:

答案 0 :(得分:0)

使用

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;
    }

答案 1 :(得分:0)

在强类型DataSet中出现这种问题。

可能在填写Dataset之前,请获取相应的DataColumn并将DataColumn.AllowDBNull设置为true。

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