C# &引用;System.InvalidCastException:指定的强制转换无效";-日期时间

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=(

我正在更新网站中的某些字段,其中出现以下错误:

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);
        }
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
。您应该检查是否为空并适当地处理它。Id
DateUpdated
a
DateTime
数据库中的字段?它可能是空的吗?你错过了最重要的部分。
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"];