2016-08-29 1 views
2

Hier, wenn ich versuche, Bild in einer Gridview zu aktualisieren, kann ich alles ziemlich einfach aktualisieren. Wenn ich kein Bild auswähle und versuche, andere Felder zu aktualisieren, erhalte ich einen Fehler.Die parametrisierte Abfrage erwartet den Parameter '@ProductImage', der nicht geliefert wurde

Hier ist mein Code.

protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e) 
    { 
     int productId = Convert.ToInt32(GridView1.DataKeys[e.RowIndex].Value); 

     TextBox productName = GridView1.Rows[e.RowIndex].FindControl("ProductTextBox") as TextBox; 
     TextBox description = GridView1.Rows[e.RowIndex].FindControl("DescriptionTextBox") as TextBox; 
     TextBox itemsInSet = GridView1.Rows[e.RowIndex].FindControl("ItemsTextBox") as TextBox; 
     TextBox unitPriceOwner = GridView1.Rows[e.RowIndex].FindControl("PriceOwnerTextBox") as TextBox; 
     TextBox unitPriceReseller = GridView1.Rows[e.RowIndex].FindControl("PriceResellerTextBox") as TextBox; 
     TextBox shippingCost = GridView1.Rows[e.RowIndex].FindControl("CostTextBox") as TextBox; 
     TextBox inOffer = GridView1.Rows[e.RowIndex].FindControl("InOfferTextBox") as TextBox; 
     CheckBox visible = GridView1.Rows[e.RowIndex].FindControl("VisibleCheckBox") as CheckBox; 

     FileUpload FileUpload1 = (FileUpload)GridView1.Rows[e.RowIndex].FindControl("FileUpload1"); 

     Product product = new Product(); 
     product.ProductID = productId; 
     product.ProductName = productName.Text; 
     product.Description = description.Text; 
     product.ItemsInSet = Convert.ToInt32(itemsInSet.Text); 
     product.UnitPriceOwner = Convert.ToInt32(unitPriceOwner.Text); 
     product.UnitPriceReseller = Convert.ToInt32(unitPriceReseller.Text); 
     product.ShippingCost = Convert.ToInt32(shippingCost.Text); 
     product.InOffer = Convert.ToBoolean(inOffer.Text); 
     product.Visible = visible.Checked; 

     if (FileUpload1.HasFile) 
     { 
      int length = FileUpload1.PostedFile.ContentLength; 
      product.ProductImage = new byte[length]; 
      FileUpload1.PostedFile.InputStream.Read(product.ProductImage, 0, length); 
     } 
     else 
     { 
      ProductBL.GetImage(productId); 
     } 

     ProductBL.UpdateProduct(product); 

     GridView1.EditIndex = -1; 
     GridView1.DataSource = ProductBL.GetProducts(); 
     GridView1.DataBind(); 
    } 

Dies ist mein Business Logic Layer-Code für Produkt.

public static void UpdateProduct(Product product) 
    { 
     string query = "UPDATE [Products] SET [ProductName] = @ProductName, [Description] = @Description, [ItemsInSet] = @ItemsInSet, " + 
         "[UnitPriceOwner] = @UnitPriceOwner, [UnitPriceReseller] = @UnitPriceReseller, [CategoryID] = @CategoryID, " + 
         "[ShippingCost] = @ShippingCost, [InOffer] = @InOffer, [ProductImage] [email protected], [Visible] = @Visible WHERE [ProductID] = @ProductID"; 
     SqlCommand cmd = new SqlCommand(query); 

     cmd.Parameters.AddWithValue("@ProductName", SqlDbType.Text).Value = product.ProductName; 
     cmd.Parameters.AddWithValue("@Description", SqlDbType.Text).Value = product.Description; 
     cmd.Parameters.AddWithValue("@ItemsInSet", SqlDbType.Int).Value = product.ItemsInSet; 
     cmd.Parameters.AddWithValue("@UnitPriceOwner", SqlDbType.Int).Value = product.UnitPriceOwner; 
     cmd.Parameters.AddWithValue("@UnitPriceReseller", SqlDbType.Int).Value = product.UnitPriceReseller; 
     cmd.Parameters.AddWithValue("@CategoryID", SqlDbType.Int).Value = product.CategoryID; 
     cmd.Parameters.AddWithValue("@ShippingCost", SqlDbType.Int).Value = product.ShippingCost; 
     cmd.Parameters.AddWithValue("@InOffer", SqlDbType.Bit).Value = product.InOffer; 
     cmd.Parameters.AddWithValue("@Visible", SqlDbType.Bit).Value = product.Visible; 
     cmd.Parameters.AddWithValue("@ProductID", SqlDbType.Text).Value = product.ProductID; 
     cmd.Parameters.AddWithValue("@ProductImage", SqlDbType.Image).Value = product.ProductImage; 

     DbUtility.UpdateDb(cmd); 
    } 

Antwort

1

Sie können, wie dies vor Update überprüfen:

SqlParameter unitsParam = command.Parameters.AddWithValue("@ProductImage", SqlDbType.Image); 
if (product.ProductImage == null) 
{ 
    unitsParam.Value = DBNull.Value; 
} 
else 
{ 
    unitsParam.Value = product.ProductImage 
} 
+1

Wahrscheinlich meinen Sie _product.ProductImage == null_ und der Vollständigkeit halber auch noch die sonst Teil – Steve

+0

Ja, mein Fehler. Aktualisiert –

+0

Jetzt bekomme ich diesen Fehler. Weitere Informationen: Operandentyp-Konflikt: nvarchar ist nicht mit dem Image kompatibel. – Orion

Verwandte Themen