C# &引用;System.InvalidCastException:指定的强制转换无效";-日期时间
我正在更新网站中的某些字段,其中出现以下错误: 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行:} 我的更新查询如下所示:C# &引用;System.InvalidCastException:指定的强制转换无效";-日期时间,c#,asp.net,datetime,C#,Asp.net,Datetime,我正在更新网站中的某些字段,其中出现以下错误: System.InvalidCastException:指定的强制转换无效 以及错误所在的代码(如错误消息所示): 第77行:productObj.QuantityInStock= dt.Rows[0][“QuantityInStock”].ToString() 第78行:productObj.MinQuantity=dt.Rows[0][“MinQuantity”].ToString() 第79行:productObj.DateUpdated=(
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);
}
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;
}
}
此方法中似乎存在错误:
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;
}
有什么想法/建议吗
编辑:1这是我的表格的图像:
DateTime
在.NET中不能为空。如果您的数据库可以有空值,则可以将DateUpdated
的类型更改为可为空的日期/时间(DateTime?
):
或使用“魔术”值表示空值:
productObj.DateUpdated = (DateTime)(dt.Rows[0]["DateUpdated"] == DBNull.Value ? DateTime.MinValue : dt.Rows[0]["DateUpdated"]);
DateTime
在.NET中不能为空。如果您的数据库可以有空值,则可以将DateUpdated
的类型更改为可为空的日期/时间(DateTime?
):
或使用“魔术”值表示空值:
productObj.DateUpdated = (DateTime)(dt.Rows[0]["DateUpdated"] == DBNull.Value ? DateTime.MinValue : dt.Rows[0]["DateUpdated"]);
或者,如果productObj.DateUpdate
可为空DateTime?
if (!Convert.IsDBNull(dt.Rows[0]["DateUpdated"]))
productObj.DateUpdated.Value = (DateTime)dt.Rows[0]["DateUpdated"];
或者,如果productObj.DateUpdate
可为空DateTime?
if (!Convert.IsDBNull(dt.Rows[0]["DateUpdated"]))
productObj.DateUpdated.Value = (DateTime)dt.Rows[0]["DateUpdated"];
Id
DateUpdated
数据库中的DateTime
字段?它可能是空的吗?你错过了最重要的部分。tblProduct
看起来像什么?请在数据库中发布dt.Rows[0][“DateUpdated”]
Yes的值,该值为空@DStanley@AbhishekGhosh:是的。该值将为DbNull.value
,不能转换为DateTime
。您应该检查是否为空并适当地处理它。IdDateUpdated
aDateTime
数据库中的字段?它可能是空的吗?你错过了最重要的部分。tblProduct
看起来像什么?请在数据库中发布dt.Rows[0][“DateUpdated”]
Yes的值,该值为空@DStanley@AbhishekGhosh:是的。该值将为DbNull.value
,不能转换为DateTime
。您应该检查是否为空并进行适当的处理。DateTime.MinValue
将返回什么?正如您所看到的,DateUpdated
只能在字段更新时有一个值。。所以我需要没有值或记录更新的日期时间?是DateTime
支持的最早日期吗?即0001年1月1日
如果您可以将DateUpdated
更改为DateTime?
则可以将其设置为空DateTime
不能有“无值”。当该列中有空值时,我是否显示自定义消息?因此,我无法显示0001年1月1日DateTime.MinValue将返回什么?正如您所看到的,DateUpdated
只能在字段更新时有一个值。。所以我需要没有值或记录更新的日期时间?是DateTime
支持的最早日期吗?即0001年1月1日
如果您可以将DateUpdated
更改为DateTime?
则可以将其设置为空DateTime
不能有“无值”。当该列中有空值时,我是否显示自定义消息?因此,我无法显示0001年1月1日
转换失败到DateTime.MinValueI我收到此错误:System.Data.SqlClient.SqlException:将nvarchar值'System.Web.UI.WebControls.TextBox'转换为数据类型int.
时,在我获取更新查询结果的部分(这是一个int
)您是如何将“System.Web.UI.WebControls.TextBox”输入数据库字段的?我没有!我不明白为什么我会犯这个错误@AbhishekGhosh-您正在使用txtMinQty.ToString()代码>和txtInStock.ToString()
分配两个prodObj
字段。这些ToString()
调用生成“System.Web.UI.WebControls.TextBox”,并写入数据库。QuantityInStock和MinQuantity字段应为整数,作为其在数据库中的对应列。转换为DateTime.MinValueI失败我收到此错误:System.Data.SqlClient.SqlException:将nvarchar值“System.Web.UI.WebControls.TextBox”转换为数据类型int时失败。
更新查询的结果(这是一个int
)您是如何将“System.Web.UI.WebControls.TextBox”输入数据库字段的?我没有!我不明白为什么我会犯这个错误@AbhishekGhosh-您正在使用txtMinQty.ToString()代码>和txtInStock.ToString()
分配两个prodObj
字段。这些ToString()
调用生成“System.Web.UI.WebControls.TextBox”,并写入数据库。QuantityInStock和MinQuantity字段应为整数,作为其在数据库中的对应列。
if (!Convert.IsDBNull(dt.Rows[0]["DateUpdated"]))
productObj.DateUpdated.Value = (DateTime)dt.Rows[0]["DateUpdated"];