2009-04-01 5 views
1

J'essaie de renvoyer un binaire de la base de données en utilisant linq pour l'affichage dans le navigateur. La méthode ci-dessous utilisant ado.net fonctionne mais j'essaye d'ypgrade linq mais la version de linq a renvoyé l'erreur.Erreur: System.Data.Linq.Binary 'ne peut pas être converti en' tableau multidimensionnel de Byte '

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 

travail Linq Version:

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 

Répondre

2

Vous devriez pouvoir appeler Response.BinaryWrite (result.ToArray()). Notez les parenthèses, ToArray est un appel de méthode.

+0

Bonne prise, je ne connais pas VB si :) – leppie

0

Vous ne devriez pas avoir le casting comme Binary.ToArray, retourne déjà un tableau d'octets.

Une alternative consiste à utiliser directement un tableau d'octets. Vous pouvez le modifier dans le concepteur.

MISE À JOUR:

Je ne suis pas complètement sûr, mais il se pourrait que votre DataContext a été disposé déjà. Je pense que le type binaire utilise le chargement différé.

Si vous ajoutez une pile, nous pourrions voir si c'est le cas.

+0

Je recevais un nullReference tout le temps car les données n'étaient pas dans le modèle. Je ne sais pas comment ça va être avec les gros fichiers. J'espère que quelqu'un va parler de ça. J'ai également trouvé cet article http://tinyurl.com/ck39un/ Il remplit plus de blancs pour moi. – ruffone

Questions connexes