2011-04-15 64 views
1

我一直在努力研究一段時間。我正在嘗試將圖像添加到SQL數據庫。我知道這不是最好的方式,但我的老闆真的很想這樣。我將添加圖像的表格和圖像列圖片將圖像添加到ASP.NET中的SQL數據庫時出現的問題

這是我使用將其添加到存儲過程:

ALTER PROCEDURE pr_INSRT_Img (@Img image, @name varchar(50)) 
AS 
BEGIN 
    UPDATE usr 
    SET Img= @Img 
    WHERE disp_nm = @name 
END 

我的應用程序在ASP.NET 4.0製作。它的工作原理是用戶選擇帶有AJAX AsyncFileUpload的圖像並在該控件的UploadComplete功能上選擇,並調用StoredProcedure來執行INSERT。 ASynchFileUPload位於gridview中的UpdatePanel中的一個手風琴中。

UploadComplete:

protected void OnUpdateComplete(object sender, EventArgs e) 
     { 
      Image ImgUser = new Image(); 
      AsyncFileUpload asyncSender = new AsyncFileUpload(); 
      UpdatePanel pnlinfo = new UpdatePanel(); 
      AsyncFileUpload asyncGv = new AsyncFileUpload(); 
      Accordion accordion = new Accordion(); 
      Label lblName = new Label(); 

      //finding the row of the sender 
      asyncSender = (AsyncFileUpload)sender; 

      foreach (GridViewRow Row in gvData.Rows) 
      { 
       accordion = (Accordion)Row.Cells[0].FindControl("Accordion"); 
       asyncGv = (AsyncFileUpload)accordion.FindControl("AsyncFileUpload"); 
       if (asyncSender.ClientID == asyncGv.ClientID) 
       { 
        ImgUser = (Image)accordion.FindControl("imgUser"); 
        ImgUser.ImageUrl = asyncGv.FileName; 
        lblName = (Label)Row.Cells[0].FindControl("lblPnlName"); 
        bool IsWorking = InsertImage(asyncGv.FileBytes, lblName.Text); 
        pnlinfo = (UpdatePanel)Row.Cells[0].FindControl("pnlInfo"); 
        pnlinfo.Update(); 
        break; 
       } 
      } 

InsertImage:

//pr_INSRT_Img 
    SqlCommand cmd = new SqlCommand(ConfigManager.InsertImage); 
    cmd.CommandType = CommandType.StoredProcedure; 

    //set the parameters 
    cmd.Parameters.Add("@Img", SqlDbType.Image).Value = ImgData; 
    cmd.Parameters.Add("@name", SqlDbType.VarChar).Value = Name; 

    int ifWorks = DBUtils.ExecuteCmdScalar(cmd, ConfigManager.PhonebookSQLConnectionString); 

    if (ifWorks != 0) 
     return true; 
    else 
     return false; 

代碼ASPX部分,其中ASychFileUpload是:

<div runat="server" class="divRow" style="text-align:center; width:300px; float:left;"> 
             <asp:Accordion ID="Accordion" runat="server" FadeTransitions="true" FramesPerSecond="40" TransitionDuration="250" 
              AutoSize="None" SelectedIndex="-1" RequireOpenedPane="false" SuppressHeaderPostbacks="true" Height="50px" Width="360px"> 
              <Panes> 
               <asp:AccordionPane ID="AccordionPane" runat="server"> 
                <Header> 
                 <asp:Image ID="imgUser" runat="server" ImageAlign="Middle" ImageUrl="~/silhouette.jpg" 
                  Width="100px" Height="100px" EnableViewState="true"/> 
                </Header> 
                <Content> 
                 <asp:AsyncFileUpload ID="AsyncFileUpload" runat="server" OnUploadedComplete="OnUpdateComplete" /> 
                </Content> 
               </asp:AccordionPane> 
              </Panes> 
             </asp:Accordion> 
             <asp:Button ID="btnUpdate" runat="server" OnClick="btnUpdate_Click" Visible="false" /> 
            </div><br /><br /> 

我的問題是,當我上傳圖像時,ExecuteScalar()返回0,這意味着圖像沒有插入到表中。我試過把varbinary(max) Field而不是Image類型,但它不起作用。我在網上可以找到的所有內容都告訴我使用該代碼或該代碼的變體(其他方法來獲取字節數組,我只是採用最簡單的方法)。

總的來說,爲什麼UPDATE失敗,我該如何讓它工作。

感謝

+0

你在哪裏設置「ImgData」? – Oded 2011-04-15 18:58:17

+0

你有錯誤嗎?如果不存在usr.Image中的數據還是爲空? – 2011-04-15 19:02:25

回答

0

本文說明了一切:

http://www.dotnetcurry.com/ShowArticle.aspx?ID=129

希望,當你得到它的工作和你的老闆認爲這是多麼慢,你會被允許做的正確方式並將圖像存儲在磁盤上。

+0

thx,我最終說服了我的老闆只發送路徑。 – Hugo 2011-06-28 19:27:44

+0

我會猶豫存儲完整的路徑 - 圖像可能會在未來移動。通常,只存儲文件名並且圖像目錄是設置。 – 2011-06-28 22:16:25

相關問題