2015-05-21 3 views
3

Обработчик не возвращает изображение. Если я удаляю условный оператор, обработчик возвращает изображение. Это мой кодОбщий обработчик не возвращает значения

public void ProcessRequest(HttpContext context) 
    { 
     string sid = "JUN15MBACHN001"; 
     SqlConnection connection = new SqlConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString); 
     connection.Open(); 
     SqlCommand command = new SqlCommand("select suppassportphoto from studdetails where sregno=" + sid, connection); 
     SqlDataReader dr = command.ExecuteReader(); 
     dr.Read(); 
     Byte[] br = (Byte[])dr[0]; 
     if (br.Length > 1) 
     { 
      context.Response.BinaryWrite((Byte[])dr[0]); 
     }   
     else 
     { 
      string path = context.Server.MapPath("~/image/emptymalepic.jpg"); 
      byte[] byteArray = File.ReadAllBytes(path); 
      context.Response.BinaryWrite(byteArray); 
     } 
     connection.Close(); 
     context.Response.End(); 
    } 

    public bool IsReusable 
    { 
     get 
     { 
      return false; 
     } 
    } 

Я не знаю, где я ошибаюсь? Любая помощь будет оценена по достоинству.

ответ

0

Как я могу заметить, в вашем коде br.Length всегда меньше 1

Попробуйте этот код link

{ 
SqlConnection con = new SqlConnection("Server=Darkover;uid=<username>;pwd=<strong password>;database=northwind"); 
SqlDataAdapter da = new SqlDataAdapter("Select * From MyImages", con); 
SqlCommandBuilder MyCB = new SqlCommandBuilder(da); 
DataSet ds = new DataSet("MyImages"); 

byte[] MyData= new byte[0]; 

da.Fill(ds, "MyImages"); 
DataRow myRow; 
myRow=ds.Tables["MyImages"].Rows[0]; 

MyData = (byte[])myRow["imgField"]; 
int ArraySize = new int(); 
ArraySize = MyData.GetUpperBound(0); 

FileStream fs = new FileStream(@"C:\winnt\Gone Fishing2.BMP", FileMode.OpenOrCreate, FileAccess.Write); 
fs.Write(MyData, 0,ArraySize); 
fs.Close(); 
} 
1

Прежде всего я рекомендовал бы, чтобы бросить по-другому, потому что ваш код может вызвать недопустимое исключение литого:

Byte[] br = dr[0] as Byte[]; 

Затем проверить на нуль

if (br != null && br.Length > 1) 

Затем записать файл:

context.Response.ContentType = "image/jpeg"; // or whatever type you're using 
context.Response.BinaryWrite(br); 

И заменить

context.Response.End(); 

с

HttpContext.Current.ApplicationInstance.CompleteRequest(); 

Потому что я заметил, что почему-то некоторые браузеры не нравится ответ. End()

Надеюсь, что это полезно. Удачи!

+0

Тем не менее он не работает, но если я удалить DataReader обработчик возвращает изображение. –

+0

Это означает, что ваш запрос не возвращает правильное изображение. Вы выполнили запрос вручную, чтобы узнать, какие результаты? –

0

попробовать это

Sub ProcessRequest(ByVal context As HttpContext) Implements IHttpHandler.ProcessRequest 
 
     Dim _ConnectionString As String = ConfigurationManager.AppSettings("ConnectionString") 
 
     Dim UserId As String = context.Request.QueryString("Id") 
 
     Dim con As New SqlConnection(_ConnectionString) 
 
     Try 
 
      con.Open() 
 
      Dim cmd As New SqlCommand(Convert.ToString("select UserPhoto from tblEmployee where EmpId=") & UserId, con) 
 
      Dim dr As SqlDataReader = cmd.ExecuteReader() 
 
      dr.Read() 
 
      If Not dr.IsDBNull(0) Then 
 
       context.Response.BinaryWrite(DirectCast(dr(0), Byte())) 
 
      Else 
 
       Dim imgpath As String = context.Server.MapPath("~/images/images.jpg") 
 
       Dim byteArray As Byte() = File.ReadAllBytes(imgpath) 
 
       context.Response.BinaryWrite(byteArray) 
 
      End If 
 

 
     Catch ex As Exception 
 
      Throw ex 
 
     End Try 
 
    End Sub

Смежные вопросы