我正在尝试执行删除操作,但我需要确保在尝试删除之前存在一个值。该值将从数据库中提取。我需要检查dbnull。如果不是,则可以继续删除。我尝试了以下方法,但不起作用:
if (!DBNull.Value.Equals(x.ColourImage))
{
File.Delete(HttpContext.Current.Server.MapPath(x.ColourImage));
}
当我尝试时,我得到了以下异常:
内部异常类型: System.InvalidCastException
无法将'System.DBNull‘类型的对象强制转换为'System.String’类型。
内部来源: App_Code.bvtnyzaw
内部堆栈跟踪:
在c:\Users\micha\AppData\ Products.GetAllProdColoursRow.get_ColourImage() \Temporary Files\vs\d9cd3740\a9faac06\App_Code.bvtnyzaw.2.cs:line ASP.NET 2245中的Products.GetAllProdColoursRow.get_ColourImage()异常类型: System.Data.StrongTypingException
异常:表'GetAllProdColours‘中列'ColourImage’的值为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 prodColourDeleted = false;try { 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;
}
我得到的例外是
'System.Data.StrongTypingException'类型的
“product.ColourImage”引发了异常
发布于 2018-06-04 02:14:09
在强类型的DataSet
中,就会出现这种问题。
可能在填充Dataset
之前,获取相应的DataColumn
并将DataColumn.AllowDBNull
设置为true。
https://msdn.microsoft.com/en-us/library/system.data.datacolumn.allowdbnull(v=vs.110).aspx
发布于 2018-06-02 16:40:16
使用
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;
}
https://stackoverflow.com/questions/50654518
复制相似问题