1

SQL Serverデータベースから.NETのバイト文字列を抽出し、それをイメージに変換しようとしています。私のコードは次のようになります

Dim strqry As String = "SELECT preview FROM dbo.AmazonS3FilePreview WHERE fileKey ='" + incomingKey + "'"
    Dim myComm As SqlCommand = New SqlCommand(strqry, myConn)
    Dim resultReader As SqlDataReader = myComm.ExecuteReader
    Dim previewBytes As Byte() = Nothing
    While resultReader.Read()
        previewBytes = DirectCast(resultReader.Item("preview"), Byte())
    End While
    If Not previewBytes Is Nothing Then
        Dim ms As MemoryStream = New MemoryStream(previewBytes)
        Response.ContentType = "image/jpeg"
        Response.OutputStream.Write(ms.GetBuffer, 0, ms.GetBuffer.Length)
        Response.AddHeader("Content-Disposition", "attachment;filename=" + incomingKey)
    End If

しかし、その行Response.OutputStream.Write(ms.GetBuffer, 0, ms.GetBuffer.Length)で「。」というエラーが表示されますUnauthorizedAccessException: MemoryStream's internal buffer cannot be accessed。データベース内の通常のchar列を確実に読み取ることができますが、バイトの読み取りに問題があるのはなぜですか?

4

1 に答える 1

2

を使用する必要はありませんしGetBuffer、とにかく使用すべきではありません (実際のデータよりも大きい内部バッファーであるため、その長さは無意味です)。MemoryStream実際には、すでにバイトがあるので、まったく必要ありません。次のように実行できます。

    Response.ContentType = "image/jpeg"
    Response.OutputStream.Write(previewBytes, 0, previewBytes.Length)
于 2012-11-20T20:21:26.537 に答える