none
將圖片上傳放入資料庫與讀出的做法

    問題

  • 請問如果想在新增資料庫資料時,

    讓使用者選擇圖片檔,

    然後將圖片上傳放入資料庫

    在讀取資料時將資料庫中的圖片讀出顯示

     

    如此的程式如何用ASP.NET2.0完成呢

     

    2006年3月16日 上午 04:20

解答

所有回覆

  • 參考這篇文章,有詳細的說明:

    http://www.123aspx.com/redir.aspx?res=31826

    2006年3月16日 上午 05:40
  • 我的是1.1的範例小筆記,因該是可以通2.0
    都是ADO.NET

    /* 
    上傳一個圖片到DB
    */
    /*程式說明:
    1.見一個範例的資料表    
    2.程式使用面 (上傳)
    3.把圖片讀出DB顯示

    */    
    //1.
    CREATE TABLE [dbo].[ImageTable] (
     [ImageID] [int] IDENTITY (1, 1) NOT NULL ,
     [ImageData] [image] NULL ,
     [ImageContentType] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
     [ImageDescription] [varchar] (200) COLLATE Chinese_PRC_CI_AS NULL ,
     [ImageSize] [int] NULL
    ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
    GO
                 
    //2. 使用Html控件UpdataLoad 並給予Server 執行
     void Button_Submit(System.Object sender, System.EventArgs e)
       {
         // HttpPostedFile讀取圖片屬性
         HttpPostedFile UpFile = UP_FILE.PostedFile;

         // 取的檔案的大小
         int FileLength = UpFile.ContentLength;

         try
         {
        if (FileLength == 0)
        {
         txtMessage.Text = "<b>沒有檔案!</b>";
        }
        else
        {
         // 建立要存圖片的Byte模組
         Byte[] FileByteArray = new Byte[FileLength];

         // 建立數據流
         Stream StreamObject = UpFile.InputStream; 
       
         //讀取圖像文件的數據
         //FileByteArray為數據的儲存體,0數據開始位置FileLnegth長度
         StreamObject.Read(FileByteArray,0,FileLength);  

         //
         string ConnStr = "Server=(local);User id=sa;Pwd=;Database=Northwind";
         string query = "INSERT INTO ImageTable (ImageData, ImageContentType, ImageDescription, ImageSize) VALUES (@ImageData, @ImageContentType, @ImageDescription, @ImageSize)";
         SqlCommand myCommand = new SqlCommand(query, new SqlConnection(ConnStr));

         // 添加各項值
         myCommand.Parameters.Add("@ImageData", SqlDbType.Image);
         myCommand.Parameters.Add("@ImageContentType", SqlDbType.VarChar, 50);
         myCommand.Parameters.Add("@ImageDescription", SqlDbType.VarChar, 200);
         myCommand.Parameters.Add("@ImageSize", SqlDbType.BigInt);
         myCommand.Parameters["@ImageData"].Value = FileByteArray;
         myCommand.Parameters["@ImageContentType"].Value = UpFile.ContentType;
         myCommand.Parameters["@ImageDescription"].Value = txtDescription.Text;
         myCommand.Parameters["@ImageSize"].Value = FileLength;
         
         // 
         myCommand.Connection.Open();
         myCommand.ExecuteNonQuery();
         myCommand.Connection.Close();

         //
         txtMessage.Text = "<b>上傳成功</b>";
        }
       }
       catch (Exception ex)
       {
        //
        txtMessage.Text = ex.Message.ToString();
       }
      }
      
    //3.
      void SubmitBtn_Click(object sender, System.EventArgs e)
       {         
        //該圖片在DB的ID號
        int ImgID = Convert.ToInt32(ImgIDTextBox.Text);

        string ConnStr = "Server=(local);User id=sa;Pwd=;Database=Northwind";
        string query = "SELECT * FROM ImageTable WHERE ImageID = @ImageID";

        SqlCommand myCommand = new SqlCommand(query, new SqlConnection(ConnStr));
        myCommand.Parameters.Add("@ImageID", SqlDbType.Int);
        myCommand.Parameters["@ImageID"].Value = ImgID;
        myCommand.Connection.Open();

        SqlDataReader dr = myCommand.ExecuteReader();

        if(dr.Read())
        {
         //把HTTP開始以二進位輸出輸出text/html
         Response.ContentType = (string)dr["ImageContentType"];  
         //三各參數為 輸出的BYTE字元組 起始位置 結束位置    
         Response.OutputStream.Write((byte[])dr["ImageData"], 0, (int)dr["ImageSize"]);
        }
        else
        {
         Response.Write("沒這各圖片ID");
         Response.End();
        }

        dr.Close();
        myCommand.Connection.Close();
       }

     

     

    希望對您有幫助。

    2006年3月16日 上午 05:45