2009-04-01 1 views
1

브라우저에서 표시하기 위해 linq를 사용하여 DB에서 이진수를 반환하려고합니다. ado.net 작품을 사용하여 아래의 방법은하지만 linq에 ypgrade하려고하지만 linq 버전 오류를 반환했습니다.Error : System.Data.Linq.Binary '을'1 차원 바이트 배열 '로 변환 할 수 없습니다.

Public Sub ProcessRequest(ByVal context As System.Web.HttpContext) 
    Dim imageId As String = context.Request.QueryString("id") 
    Dim ret As DataTable = Nothing 
    ret = DPGetImageData.GetImageById(Convert.ToInt64(imageId)) 

     For Each dt As DataRow In ret.Rows 
      For Each c As DataColumn In ret.Columns 
       If Not (dt(c) Is Nothing) Then 
        context.Response.Clear() 
        context.Response.BufferOutput = False 
        context.Response.OutputStream.Write(CType(dt.Table.Rows(0).Item("imageData"), Byte()), 0, CInt(dt.Table.Rows(0).Item("imageSize"))) 
        context.Response.End() 
       End If 

      Next 
     Next 


End Sub 

작업 Linq에 버전 :

Public Sub ProcessRequest(ByVal context As HttpContext) Implements IHttpHandler.ProcessRequest 
    If Not String.IsNullOrEmpty(Current.Request.QueryString("Id")) Then 
     Dim imageId = HttpContext.Current.Request.QueryString("Id") 
     Dim result = repository.FindById(Convert.ToInt64(imageId)).imageData.ToArray 
     HttpContext.Current.Response.BinaryWrite(result) 
     context.Response.End() 

    End If 
End Sub 

답변

2

Response.BinaryWrite (result.ToArray())를 호출 할 수 있어야합니다. parantheses에 주목하자. ToArray는 메소드 호출이다.

+0

좋은 캐치, 나도 VB는 몰라 :) – leppie

0

당신은 Binary.ToArray로 캐스트를 필요로 이미 바이트 배열을 반환해서는 안된다.

바이트 배열을 직접 사용할 수도 있습니다. 디자이너에서 수정할 수 있습니다.

UPDATE :

나는 완전히 잘 모르겠지만, 그것은 당신의 DataContext에 이미 배치 된 것을 수 있습니다. Binary 유형은 지연된로드를 사용한다고 생각합니다.

stacktrace를 추가하면 그 경우인지 확인할 수 있습니다.

+0

데이터가 모델에 없기 때문에 나는 항상 nullReference를 얻고있었습니다. 나는 큰 파일을 얼마나 선호하는지 모른다. 나는 누군가가 그것에 대해 이야기하기를 바랍니다. 나는 또한이 기사 http://tinyurl.com/ck39un/을 발견했다. 그것은 나를 위해 많은 공란을 채운다. – ruffone

관련 문제