2015-08-26 45 views
1

我更新我的網站,在那裏我得到以下錯誤的某些字段:「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行:}

我的更新查詢是這樣的:

public int Update(Product obj) 
     { 
      string query = "update tblProduct set [email protected],[email protected],Prod[email protected],[email protected],[email protected],[email protected] WHERE [email protected]"; 

      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 [email protected]"; 
      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; 
     } 

在我的數據庫過於我所提到的數據類型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這裏是我的表的圖像:

enter image description here

+2

Id'DateUpdated'在數據庫中的'DateTime'字段?它可以是空嗎? –

+0

你錯過了最重要的部分。 'tblProduct'看起來像什麼? –

+0

請發佈'dt.Rows [0] [「DateUpdated」]的值' –

回答

1
productObj.DateUpdated = Convert.IsDBNull(dt.Rows[0]["DateUpdated"])? 
    DateTime.MinValue : (DateTime)dt.Rows[0]["DateUpdated"]; 

,或者,如果productObj.DateUpdated可爲空DateTime?

if (!Convert.IsDBNull(dt.Rows[0]["DateUpdated"])) 
    productObj.DateUpdated.Value = (DateTime)dt.Rows[0]["DateUpdated"]; 
+0

轉換失敗DateTime.MinValue –

+0

我會嘗試你的第二個方法.. –

+0

我得到這個錯誤:'System.Data.SqlClient.SqlException:轉換nvarchar值時轉換失敗'System.Web.UI.WebControls.TextBox'到數據類型int.'在我得到更新查詢結果的部分(這是一個'int') –

3

DateTime不能在.NET空。如果你的數據庫可以有空值,那麼你可以的DateUpdated類型更改爲可空日期/時間(DateTime?):

productObj.DateUpdated = (DateTime?)(dt.Rows[0]["DateUpdated"] == DBNull.Value ? null : dt.Rows[0]["DateUpdated"]); 

,或者使用「魔術」值表示空:

productObj.DateUpdated = (DateTime)(dt.Rows[0]["DateUpdated"] == DBNull.Value ? DateTime.MinValue : dt.Rows[0]["DateUpdated"]); 
+0

'DateTime.MinValue'返回什麼? –

+0

正如你所看到的'DateUpdated'只能有一個值,當字段更新..所以我需要沒有值或更新記錄時的日期時間..? –

+0

[DateTime.MinValue](https://msdn.microsoft.com/en-us/library/system.datetime.minvalue.aspx)是'DateTime'支持的最早日期 - 即'Jan 1,0001' –

相關問題