【发布时间】:2015-11-20 19:11:35
【问题描述】:
我正在更新我网站中的某些字段,出现以下错误:
System.InvalidCastException:指定的强制转换无效。
以及出错的代码是这样的(如错误信息所示):
第 77 行:productObj.QuantityInStock = dt.Rows[0]["QuantityInStock"].ToString();
第 78 行:productObj.MinQuantity = dt.Rows[0]["MinQuantity"].ToString();
第 79 行:productObj.DateUpdated =(DateTime)dt.Rows[0]["DateUpdated"]; //这是错误来的地方
第 80 行:productObj.DateCreated = (DateTime)dt.Rows[0]["DateCreated"];
第 81 行:}
我的更新查询是这样的:
public int Update(Product obj)
{
string query = "update tblProduct set ProdName=@pname,ProdDescription=@pdesc,ProdSize=@psize,ProdPrice=@pprice,QuantityInStock=@qis,MinQuantity=@mq WHERE ProductID=@pid";
List<SqlParameter> lstParams = new List<SqlParameter>();
lstParams.Add(new SqlParameter("@pid", obj.ProductID));
lstParams.Add(new SqlParameter("@pname", obj.ProdName));
lstParams.Add(new SqlParameter("@pprice", obj.ProdPrice));
lstParams.Add(new SqlParameter("@pdesc", obj.ProdDescription));
lstParams.Add(new SqlParameter("@psize", obj.ProdSize));
lstParams.Add(new SqlParameter("@qis", obj.QuantityInStock));
lstParams.Add(new SqlParameter("@mq", obj.MinQuantity));
return DBUtility.ModifyData(query, lstParams);
}
Product 类如下所示:
public class Product : IModel
{
public int ProductID;
public string ProdName;
public string ProdDescription;
public string ProdSize;
public string ProdPrice;
public int CompanyID;
public string ProdPhoto;
public string QuantityInStock;
public string MinQuantity;
public int CategoryID;
public DateTime DateCreated;
public DateTime DateUpdated;
}
此方法似乎有错误:
public Product SelectByID(int ID)
{
string query = "select * from tblProduct where ProductID=@pid";
List<SqlParameter> lstParams = new List<SqlParameter>();
lstParams.Add(new SqlParameter("@pid", ID));
DataTable dt = DBUtility.SelectData(query, lstParams);
Product productObj = new Product();
if (dt.Rows.Count > 0)
{
productObj.ProdName = dt.Rows[0]["ProdName"].ToString();
productObj.ProdDescription = dt.Rows[0]["ProdDescription"].ToString();
productObj.CompanyID = Convert.ToInt32(dt.Rows[0]["CompanyID"]);
productObj.ProductID = Convert.ToInt32(dt.Rows[0]["ProductID"]);
productObj.CategoryID = Convert.ToInt32(dt.Rows[0]["CategoryID"]);
productObj.ProdSize = dt.Rows[0]["ProdSize"].ToString();
productObj.ProdPrice = dt.Rows[0]["ProdPrice"].ToString();
productObj.QuantityInStock = dt.Rows[0]["QuantityInStock"].ToString();
productObj.MinQuantity = dt.Rows[0]["MinQuantity"].ToString();
productObj.DateUpdated = (DateTime)dt.Rows[0]["DateUpdated"]; //This where error comes
productObj.DateCreated = (DateTime)dt.Rows[0]["DateCreated"];
}
return productObj;
}
在我的数据库中,我也提到了 data-type 为 DateTime,但为什么还会出现此错误?
我更新的方法如下所示:
protected void btnUpdate_Click(object sender, EventArgs e)
{
Product prodObj = new ProductLogic().SelectByID(Convert.ToInt32(Request.QueryString["ID"]));
prodObj.ProdName = txtName.Text;
prodObj.ProdPrice = txtPrice.Text;
prodObj.ProdDescription = txtDesc.Text;
prodObj.MinQuantity = txtMinQty.ToString();
prodObj.QuantityInStock = txtInStock.ToString();
prodObj.ProductID = Convert.ToInt32(Request.QueryString["ID"]);
int updateResult = new ProductLogic().Update(prodObj);
if (updateResult > 0)
{
lblUpdateRes.Text = "Detail(s) updated successfully!";
lblUpdateRes.ForeColor = System.Drawing.Color.Green;
}
else
{
lblUpdateRes.Text = "There was some error while updating your detail(s). Please try again later!";
lblUpdateRes.ForeColor = System.Drawing.Color.Red;
}
}
有什么想法/建议吗?
编辑:1这是我的桌子的图像:
【问题讨论】:
-
Id
DateUpdatedDateTime数据库中的字段?可以为空吗? -
你错过了最重要的部分。
tblProduct长什么样子? -
请贴出
dt.Rows[0]["DateUpdated"]的值 -
是的,在数据库中是 null,@DStanley
-
@AbhishekGhosh:是的。该值将为
DbNull.Value,不能转换为DateTime。您应该检查无效性并适当处理。