2016-05-27 5 views
0

Ich arbeite an asp.net mit Oracle-Datenbank. Ich möchte das Bild des Mitarbeiters drucken, das in einer alten Tabelle gespeichert ist. Ich habe nicht einmal den Datentyp des Bildes im Fotofeld dieser Tabelle gespeichert.Wie überprüfe ich, ob ein BLOB-Feld Daten enthält oder nicht?

Ich habe Image-Handler verwendet, um die Bilder aus neu erstellten Tabellen zu drucken, aber wenn ich alte Tabellen abfrage, werden die Bilder nicht gedruckt.

Woher weiß ich, dass ein Bild in der Tabelle gespeichert ist?

Wenn es ein Bild gibt, warum es nicht gedruckt wird?

Ich zeige Ihnen den Code für Bild-Handler für beide die Tabelle (NEW, OLD) Bild von neu erstellten Tabelle druckt sehr gut, aber was ist das Problem in alten.

Kann mir irgendjemand irgendwelche Vorschläge geben?

Hier ist mein ImgHandler.ashx Code;

public void ProcessRequest (HttpContext context) 
    { 
     OracleDataReader rdr = null; 
     OracleConnection conn = Conn.getConn(); 
     OracleCommand cmd = null; 
     string ImgType = context.Request.QueryString["typ"].ToString(); 
     try 
     { 
      if (ImgType=="edu")//this is working fine 
      { 
       cmd = new OracleCommand("select attachment pic from newtbl where lvldcp_code=" + context.Request.QueryString["dcp"] + "and emp_code="+context.Request.QueryString["emp"], conn); 
      } 
      else if (ImgType=="profile") 
      { 
       cmd = new OracleCommand("select photo pic from oldtbl where emp_code="+context.Request.QueryString["emp"], conn); 
      } 

      conn.Open(); 
      rdr = cmd.ExecuteReader(); 
      while (rdr.Read()) 
      { 
       context.Response.ContentType = "image/jpg"; 
       context.Response.BinaryWrite((byte[])rdr["pic"]); 
      } 
      if (rdr != null) 
       rdr.Close(); 
     } 
     catch (Exception ex) 
     { 

     } 
     finally 
     { 
      if (conn != null) 
       conn.Close(); 
     } 


    } 

Antwort

0

Wenn Ihre Abfragen einen BLOB-Feldwert zurückgeben, können Sie die OracleBlob-Klasse verwenden.

public void ProcessRequest (HttpContext context) 
{ 
    OracleDataReader rdr = null; 
    OracleConnection conn = Conn.getConn(); 
    OracleCommand cmd = null; 
    string ImgType = context.Request.QueryString["typ"].ToString(); 
    try 
    { 
     if (ImgType=="edu")//this is working fine 
     { 
      cmd = new OracleCommand("select attachment pic from newtbl where lvldcp_code=" + context.Request.QueryString["dcp"] + "and emp_code="+context.Request.QueryString["emp"], conn); 
     } 
     else if (ImgType=="profile") 
     { 
      cmd = new OracleCommand("select photo pic from oldtbl where emp_code="+context.Request.QueryString["emp"], conn); 
     } 

     Byte[] byteArray = null; 
     OracleBlob blob; 
     conn.Open(); 
     rdr = cmd.ExecuteReader(); 
     while (rdr.Read()) 
     { 
      blob = rdr.GetOracleBlob(0); 
      byteArray = new Byte[blob.Length]; 
      int i = blob.Read(byteArray, 0, System.Convert.ToInt32(blob.Length)); 

      //clob.Length or i > 0 will show if there are bites in the clob or not 
     } 
     if (rdr != null) 
      rdr.Close(); 

     context.Response.ContentType = "image/jpg"; 
     context.Response.BinaryWrite(byteArray); 
    } 
    catch (Exception ex) 
    { 

    } 
    finally 
    { 
     if (conn != null) 
      conn.Close(); 
    } 

} 
+0

ok ich es versuchen werde ... und „pic“ als Alias ​​verwendet lieber –

+0

ok, ich dachte, dass Sie es spezifizieren erforderlich wie "wählen Befestigung als pic oder wählen Sie attachment‚pic‘. Danke für die Info –

+0

kannst du bitte den Namespace für OracleLob angeben? –

Verwandte Themen