2011-04-11 70 views
0

我在設計一個GridView控件,它允許編輯和刪除包含圖像的行。每當我嘗試使用自動生成的DELETE方法我收到以下錯誤: 「操作數類型衝突:VARBINARY(max)是與SQL_VARIANT不兼容」在GridView控件中刪除圖像

這裏是我的代碼:

<div id="content"> 
     <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConflictDetection="CompareAllValues" 
      ConnectionString="<%$ ConnectionStrings:InventoryConnectionString %>" DeleteCommand="DELETE FROM [Inventory] WHERE [id] = @original_id AND [stockNum] = @original_stockNum AND [make] = @original_make AND [model] = @original_model AND [year] = @original_year AND (([miles] = @original_miles) OR ([miles] IS NULL AND @original_miles IS NULL)) AND (([engine] = @original_engine) OR ([engine] IS NULL AND @original_engine IS NULL)) AND (([drive] = @original_drive) OR ([drive] IS NULL AND @original_drive IS NULL)) AND (([color] = @original_color) OR ([color] IS NULL AND @original_color IS NULL)) AND (([description] = @original_description) OR ([description] IS NULL AND @original_description IS NULL)) AND (([image1] = @original_image1) OR ([image1] IS NULL AND @original_image1 IS NULL)) AND (([image2] = @original_image2) OR ([image2] IS NULL AND @original_image2 IS NULL)) AND (([image3] = @original_image3) OR ([image3] IS NULL AND @original_image3 IS NULL)) AND (([image4] = @original_image4) OR ([image4] IS NULL AND @original_image4 IS NULL)) AND (([image5] = @original_image5) OR ([image5] IS NULL AND @original_image5 IS NULL)) AND (([added] = @original_added) OR ([added] IS NULL AND @original_added IS NULL))" 
      InsertCommand="INSERT INTO [Inventory] ([stockNum], [make], [model], [year], [miles], [engine], [drive], [color], [description], [image1], [image2], [image3], [image4], [image5], [added]) VALUES (@stockNum, @make, @model, @year, @miles, @engine, @drive, @color, @description, @image1, @image2, @image3, @image4, @image5, @added)" 
      OldValuesParameterFormatString="original_{0}" SelectCommand="SELECT * FROM [Inventory]" 

      UpdateCommand="UPDATE [Inventory] SET [stockNum] = @stockNum, [make] = @make, [model] = @model, [year] = @year, [miles] = @miles, [engine] = @engine, [drive] = @drive, [color] = @color, [description] = @description, [image1] = @image1, [image2] = @image2, [image3] = @image3, [image4] = @image4, [image5] = @image5, [added] = @added WHERE [id] = @original_id AND [stockNum] = @original_stockNum AND [make] = @original_make AND [model] = @original_model AND [year] = @original_year AND (([miles] = @original_miles) OR ([miles] IS NULL AND @original_miles IS NULL)) AND (([engine] = @original_engine) OR ([engine] IS NULL AND @original_engine IS NULL)) AND (([drive] = @original_drive) OR ([drive] IS NULL AND @original_drive IS NULL)) AND (([color] = @original_color) OR ([color] IS NULL AND @original_color IS NULL)) AND (([description] = @original_description) OR ([description] IS NULL AND @original_description IS NULL)) AND (([image1] = @original_image1) OR ([image1] IS NULL AND @original_image1 IS NULL)) AND (([image2] = @original_image2) OR ([image2] IS NULL AND @original_image2 IS NULL)) AND (([image3] = @original_image3) OR ([image3] IS NULL AND @original_image3 IS NULL)) AND (([image4] = @original_image4) OR ([image4] IS NULL AND @original_image4 IS NULL)) AND (([image5] = @original_image5) OR ([image5] IS NULL AND @original_image5 IS NULL)) AND (([added] = @original_added) OR ([added] IS NULL AND @original_added IS NULL))"> 
      <DeleteParameters> 
       <asp:Parameter Name="original_id" Type="Int32" /> 
       <asp:Parameter Name="original_stockNum" Type="String" /> 
       <asp:Parameter Name="original_make" Type="String" /> 
       <asp:Parameter Name="original_model" Type="String" /> 
       <asp:Parameter Name="original_year" Type="Int32" /> 
       <asp:Parameter Name="original_miles" Type="Int32" /> 
       <asp:Parameter Name="original_engine" Type="String" /> 
       <asp:Parameter Name="original_drive" Type="String" /> 
       <asp:Parameter Name="original_color" Type="String" /> 
       <asp:Parameter Name="original_description" Type="String" /> 
       <asp:Parameter Name="original_image1" Type="Object" /> 
       <asp:Parameter Name="original_image2" Type="Object" /> 
       <asp:Parameter Name="original_image3" Type="Object" /> 
       <asp:Parameter Name="original_image4" Type="Object" /> 
       <asp:Parameter Name="original_image5" Type="Object" /> 
       <asp:Parameter DbType="Date" Name="original_added" /> 
      </DeleteParameters> 
      <InsertParameters> 
       <asp:Parameter Name="stockNum" Type="String" /> 
       <asp:Parameter Name="make" Type="String" /> 
       <asp:Parameter Name="model" Type="String" /> 
       <asp:Parameter Name="year" Type="Int32" /> 
       <asp:Parameter Name="miles" Type="Int32" /> 
       <asp:Parameter Name="engine" Type="String" /> 
       <asp:Parameter Name="drive" Type="String" /> 
       <asp:Parameter Name="color" Type="String" /> 
       <asp:Parameter Name="description" Type="String" /> 
       <asp:Parameter Name="image1" Type="Object" /> 
       <asp:Parameter Name="image2" Type="Object" /> 
       <asp:Parameter Name="image3" Type="Object" /> 
       <asp:Parameter Name="image4" Type="Object" /> 
       <asp:Parameter Name="image5" Type="Object" /> 
       <asp:Parameter DbType="Date" Name="added" /> 
      </InsertParameters> 
      <UpdateParameters> 
       <asp:Parameter Name="stockNum" Type="String" /> 
       <asp:Parameter Name="make" Type="String" /> 
       <asp:Parameter Name="model" Type="String" /> 
       <asp:Parameter Name="year" Type="Int32" /> 
       <asp:Parameter Name="miles" Type="Int32" /> 
       <asp:Parameter Name="engine" Type="String" /> 
       <asp:Parameter Name="drive" Type="String" /> 
       <asp:Parameter Name="color" Type="String" /> 
       <asp:Parameter Name="description" Type="String" /> 
       <asp:Parameter Name="image1" Type="Object" /> 
       <asp:Parameter Name="image2" Type="Object" /> 
       <asp:Parameter Name="image3" Type="Object" /> 
       <asp:Parameter Name="image4" Type="Object" /> 
       <asp:Parameter Name="image5" Type="Object" /> 
       <asp:Parameter Name="added" DbType="Date"></asp:Parameter> 
       <asp:Parameter Name="original_id" Type="Int32" /> 
       <asp:Parameter Name="original_stockNum" Type="String" /> 
       <asp:Parameter Name="original_make" Type="String" /> 
       <asp:Parameter Name="original_model" Type="String" /> 
       <asp:Parameter Name="original_year" Type="Int32" /> 
       <asp:Parameter Name="original_miles" Type="Int32" /> 
       <asp:Parameter Name="original_engine" Type="String" /> 
       <asp:Parameter Name="original_drive" Type="String" /> 
       <asp:Parameter Name="original_color" Type="String" /> 
       <asp:Parameter Name="original_description" Type="String" /> 
       <asp:Parameter Name="original_image1" Type="Object" /> 
       <asp:Parameter Name="original_image2" Type="Object" /> 
       <asp:Parameter Name="original_image3" Type="Object" /> 
       <asp:Parameter Name="original_image4" Type="Object" /> 
       <asp:Parameter Name="original_image5" Type="Object" /> 
       <asp:Parameter DbType="Date" Name="original_added" /> 
      </UpdateParameters> 
     </asp:SqlDataSource> 
     <asp:GridView ID="GridView1" runat="server" AllowPaging="True" AllowSorting="True" 
      AutoGenerateColumns="False" DataKeyNames="id" 
      DataSourceID="SqlDataSource1" CssClass="GridViewStyle"> 
      <Columns> 
       <asp:CommandField ShowDeleteButton="True" ShowSelectButton="True" 
        HeaderText="Options" /> 
       <asp:BoundField DataField="stockNum" HeaderText="Stock #" SortExpression="stockNum" /> 
       <asp:BoundField DataField="make" HeaderText="Make" SortExpression="make" /> 
       <asp:BoundField DataField="model" HeaderText="Model" SortExpression="model" /> 
       <asp:BoundField DataField="year" HeaderText="Year" SortExpression="year" /> 
       <asp:BoundField DataField="miles" HeaderText="Miles" SortExpression="miles" /> 
       <asp:BoundField DataField="engine" HeaderText="Engine" SortExpression="engine" /> 
       <asp:BoundField DataField="drive" HeaderText="Drive" SortExpression="drive" /> 
       <asp:BoundField DataField="color" HeaderText="Color" SortExpression="color" /> 
       <asp:BoundField DataField="description" HeaderText="Description" SortExpression="description" /> 
       <asp:ImageField DataImageUrlField="id" DataImageUrlFormatString="ImageHandler.aspx?ImageID={0}" 
        ControlStyle-Width="200" ControlStyle-Height="120" HeaderText="Preview Image"> 
        <ControlStyle Height="120px" Width="200px"></ControlStyle> 
       </asp:ImageField> 
      </Columns> 
      <RowStyle CssClass="RowStyle" /> 
      <EmptyDataRowStyle CssClass="EmptyRowStyle" /> 
      <PagerStyle CssClass="PagerStyle" /> 
      <SelectedRowStyle CssClass="SelectedRowStyle" /> 
      <HeaderStyle CssClass="HeaderStyle" /> 
      <EditRowStyle CssClass="EditRowStyle" /> 
      <AlternatingRowStyle CssClass="AltRowStyle" /> 
     </asp:GridView> 
    </div> 

代碼隱藏:

using System; 
using System.Configuration; 
using System.Data; 
using System.Data.Sql; 
using System.Data.SqlClient; 
using System.Web; 
using System.Web.Security; 
using System.Web.UI; 
using System.Web.UI.HtmlControls; 
using System.Web.UI.WebControls; 
using System.Web.UI.WebControls.WebParts; 

public partial class Account_EditInventory : System.Web.UI.Page 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 
     DataTable dt = new DataTable(); 
     String strConnString = System.Configuration.ConfigurationManager. 
      ConnectionStrings["InventoryConnectionString"].ConnectionString; 
     string strQuery = "select id, image1 from Inventory"; 
     SqlCommand cmd = new SqlCommand(strQuery); 
     SqlConnection con = new SqlConnection(strConnString); 
     SqlDataAdapter sda = new SqlDataAdapter(); 
     cmd.CommandType = CommandType.Text; 
     cmd.Connection = con; 
     try 
     { 
      con.Open(); 
      sda.SelectCommand = cmd; 
      sda.Fill(dt); 
      GridView1.DataBind(); 

     } 
     catch (Exception ex) 
     { 
      Response.Write(ex.Message); 
     } 
     finally 
     { 
      con.Close(); 
      sda.Dispose(); 
      con.Dispose(); 
      dt.Dispose(); 
     } 
    } 
} 

回答

1

您不需要嘗試傳遞圖像作爲刪除查詢中的參數,並重寫它只是將密鑰傳遞給它們的圖像。