1

ブラウザに表示するためにlinqを使用してDBからバイナリを返そうとしています。以下の ado.net を使用した方法は機能しますが、linq に ypgrade しようとしていますが、linq バージョンでエラーが返されました。

    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
4

2 に答える 2

2

Response.BinaryWrite(result.ToArray()) を呼び出すだけでよいはずです。括弧に注意してください。ToArray はメソッド呼び出しです。

于 2009-04-01T05:02:51.227 に答える
0

Binary.ToArray としてキャストする必要はありません。すでにバイト配列を返します。

別の方法は、バイト配列を直接使用することです。デザイナーで変更できます。

アップデート:

完全にはわかりませんが、DataContext が既に破棄されている可能性があります。Binary 型は遅延読み込みを使用していると思います。

スタックトレースを追加すると、そうであるかどうかを確認できます。

于 2009-04-01T04:43:25.987 に答える