2013-10-21 35 views
1

我想從Oracle數據庫中檢索圖像到在asp.net中的Image控件。我試過了,但它不起作用。如何使用C#web應用程序從Oracle數據庫檢索圖像?

這是用於插入圖像插入數據庫的代碼:

protected void btnUpload_Click(object sender, EventArgs e) 
{ 
     int imgLength = 0; 
     string imgContentType = null; 
     string imgFileName = null; 

     Stream imgStream = FileUpload.PostedFile.InputStream; 
     imgLength = FileUpload.PostedFile.ContentLength; 
     imgContentType = FileUpload.PostedFile.ContentType; 
     imgFileName = FileUpload.PostedFile.FileName; 

     if (imgContentType == "image/jpeg" || imgContentType == "image/gif" || 
     imgContentType == "image/pjpeg" 
      || imgContentType == "image/bmp") 
     { 
      OracleConnection DbConnection = new OracleConnection(con1); 
      DbConnection.Open(); 
      FileStream fls; 
      fls = new FileStream(@imgFileName, FileMode.Open, FileAccess.Read); 

      byte[] blob = new byte[fls.Length]; 
      fls.Read(blob, 0, System.Convert.ToInt32(fls.Length)); 
      fls.Close(); 

      string query = "insert into image(id,name,photo) values(1,'" + imgFileName + "'," + " :BlobParameter)"; 
      // Establish a new OracleCommand 
      OracleCommand cmd = new OracleCommand(); 

      cmd.CommandText = query; 

      cmd.Connection = DbConnection; 

      cmd.CommandType = CommandType.Text; 

      System.Data.OracleClient.OracleParameter paramImage = new System.Data.OracleClient.OracleParameter("image", 
       Oracle.DataAccess.Client.OracleDbType.Blob); 
      paramImage.ParameterName = "BlobParameter"; 
      paramImage.Value = blob; 
      paramImage.Direction = ParameterDirection.Input; 
      cmd.Parameters.Add(paramImage); 

      cmd.ExecuteNonQuery(); 
} 

表:

Id  Name         Photo 
    1  C:\\user\pictures\animal.jpeg  (BLOB) 

下面是用於檢索圖像成image控制的代碼,但該代碼不工作。 對於這兩天我一直在掙扎與此

void GetImagesFromDatabase() 
{ 
     try 
     { 
      OracleConnection DbConnection = new OracleConnection(con1); 
      DbConnection.Open(); 
      OracleCommand cmd = new OracleCommand("Select name,photo from Image", DbConnection); 
      OracleDataReader oda = cmd.ExecuteReader(); 

      while (oda.Read()) 
      { 
       string path = oda[0].ToString(); 
       img.ImageUrl = path; 
       if(oda.GetValue(1).ToString() !=""){ 
        FileStream fls; 
        fls = new FileStream(@path, FileMode.Open, FileAccess.Read); 

        byte[] blob = new byte[fls.Length]; 
        fls.Read(blob, 0, System.Convert.ToInt32(fls.Length)); 

        fls.Close(); 
        MemoryStream memStream = new MemoryStream(blob); 

        img.ImageUrl = oda[2].ToString(); 

       } 
      } 
     } 
     catch (Exception ex) 
     { 
     } 
} 

任何想法?在此先感謝

+1

的'ImageUrl'就是這樣 - 一個**網址**指向圖像。你不能只將字節流分配給該網址..... [看到這個其他SO問題](http://stackoverflow.com/questions/46788/how-to-bind-a-memorystream-to-aspimage-control )的方式來使用HttpHandler來返回圖像 –

回答

0

也許這個代碼可以幫助您:

public Image byteArrayToImage(byte[] byteArrayIn) 
{ 
    MemoryStream ms = new MemoryStream(byteArrayIn); 
    Image returnImage = Image.FromStream(ms); 
    return returnImage; 
} 
相關問題