복붙노트

[SQL] C #에서 SQL 서버에서 VARBINARY 데이터를 스트리밍

SQL

C #에서 SQL 서버에서 VARBINARY 데이터를 스트리밍

나는 ASP.Net을 사용하여 데이터베이스에서 VARBINARY (MAX) 필드에 저장된 이미지 데이터를 제공하기 위해 노력하고있어. 지금,이 코드는 다음의 DataRow에서 바이트 배열을 인상하고 응답으로 바이트 배열을 누르면, 데이터 테이블을 작성한다. 있는 방법으로이 있는지 궁금 해요 다소간하는이 거대한 바이트 배열 주위를 마샬링 할 필요없이 응답에 SQL Server에서 데이터를 스트리밍 (이미지가 크므로, 그들은 OutOfMemoryExceptions 원인). 그위한 클래스 / 메커니즘이 있습니까?

현재 코드는 더 많거나 적은 다음과 같습니다

DataTable table = new DataTable();
SqlDataAdapter adapter = new SqlDataAdapter(commandText, connectionString);
adapter.Fill(table);
DataRow row = table.Rows[0];
byte[] imageData = row[0] as byte[];
if(imageData != null)
{
  Response.Clear();
  Response.BinaryWrite(imageData);
  Response.End();
}

미리 감사는 - 어떤 도움에 감사드립니다.

해결법

  1. ==============================

    1.효율적인 스트리밍 의미를 포함하여 주제를 다루는 기사에 대한 SQL 서버에서 다운로드 및 업로드 이미지를 참조하십시오. 당신은 CommandBehavior.SequentialAccess를 함께 연 SqlDataReader 개체를 사용해야합니다 :

    효율적인 스트리밍 의미를 포함하여 주제를 다루는 기사에 대한 SQL 서버에서 다운로드 및 업로드 이미지를 참조하십시오. 당신은 CommandBehavior.SequentialAccess를 함께 연 SqlDataReader 개체를 사용해야합니다 :

    아직 닷넷 4.0이없는 경우 링크 된 문서는 단순히 Stream.CopyTo (HttpResponse.OutputStream) 또는 바이트를 사용하는 스트림은 SqlDataReader를 바탕으로 작성하기위한 전체 코드를 제공합니다 [] 사본을 청크.

    기사까지이 추적은과 데이터베이스 중 큰 VARBINARY 데이터의 효율적인 스트리밍에 대한 FILESTREAM 열을 사용하는 방법에 대해 설명합니다.

  2. ==============================

    2.레무스의 대답 @ 위는 오래된입니다 .NET 4.5 일류하는 SqlClient 스트리밍 도입하기 때문이다. 그것은 SQL 쿼리에서 스트림을 얻기 위해 SqlDataReader 개체의 GetBytes () 메소드에 액세스하는 데 더 이상 필요 없습니다.

    레무스의 대답 @ 위는 오래된입니다 .NET 4.5 일류하는 SqlClient 스트리밍 도입하기 때문이다. 그것은 SQL 쿼리에서 스트림을 얻기 위해 SqlDataReader 개체의 GetBytes () 메소드에 액세스하는 데 더 이상 필요 없습니다.

    지금 당신은 단순히 BLOB 컬럼을 통해 스트림을 얻을 수 SqlDataReader.GetStream (int)를 호출합니다.

  3. from https://stackoverflow.com/questions/5042589/streaming-varbinary-data-from-sql-server-in-c-sharp by cc-by-sa and MIT license