복붙노트

[SQL] 메모리 2005 / SQL C #에서 BLOB 데이터를 읽을 수있는 효과적인 방법

SQL

메모리 2005 / SQL C #에서 BLOB 데이터를 읽을 수있는 효과적인 방법

C # 3.5 사용하여 SQL 2005 이미지 필드를 읽을 수있는 메모리를 가장 효과적인 방법은 무엇입니까?

지금 나는이 (바이트 []) cm.ExecuteScalar ( "...").

내가 메모리에 모든 필드 내용을 읽을 수 있다면 좋을 것이라고.

해결법

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

    1.여기에이 우수한 기사 또는 그것을 수행하는 방법 긴 설명이 블로그 게시물을 참조하십시오.

    여기에이 우수한 기사 또는 그것을 수행하는 방법 긴 설명이 블로그 게시물을 참조하십시오.

    기본적으로, 당신은 당신이 그것을 만들 때에 SequentialAccess를 SqlDataReader 개체를 사용하여 지정해야합니다 - 당신은 읽기 (또는 쓰기) 할 수 있습니다 어떤 크기의 청크로 데이터베이스에서 BLOB 당신에 가장 적합합니다.

    기본적으로 뭔가 같은 :

    SqlDataReader myReader = getEmp.ExecuteReader(CommandBehavior.SequentialAccess);
    
    while (myReader.Read())
    {
       int startIndex = 0;
    
       // Read the bytes into outbyte[] and retain the number of bytes returned.
       retval = myReader.GetBytes(1, startIndex, outbyte, 0, bufferSize);
    
       // Continue reading and writing while there are bytes beyond the size of the buffer.
       while (retval == bufferSize)
       {
          // write the buffer to the output, e.g. a file
          ....
    
          // Reposition the start index to the end of the last buffer and fill the buffer.
          startIndex += bufferSize;
          retval = myReader.GetBytes(1, startIndex, outbyte, 0, bufferSize);
       }
    
       // write the last buffer to the output, e.g. a file
       ....
    }
    
    // Close the reader and the connection.
    myReader.Close();
    

    즙을 짜고 난 찌꺼기

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

    2.여기에 트릭은 IDataReader에의 데이터를 순차적 모드가 ExecuteReader를 사용하여 읽는 것입니다. 여기 CLOB에 대한 버전의 - BLOB를 거의 동일하지만, 바이트 []와 함께 GetBytes (...).

    여기에 트릭은 IDataReader에의 데이터를 순차적 모드가 ExecuteReader를 사용하여 읽는 것입니다. 여기 CLOB에 대한 버전의 - BLOB를 거의 동일하지만, 바이트 []와 함께 GetBytes (...).

    뭔가 같은 :

    using (var reader = cmd.ExecuteReader(CommandBehavior.SequentialAccess))
    {
        byte[] buffer = new byte[8040]; // or some multiple (sql server page size)
        while (reader.Read()) // each row
        {
            long dataOffset = 0, read;
            while ((read = reader.GetBytes(
                colIndex, dataOffset, buffer, 0, buffer.Length)) > 0)
            {
                // TODO: process "read"-many bytes from "buffer"
                dataOffset += read;
            }
        }
    }
    
  3. from https://stackoverflow.com/questions/1487808/memory-effective-way-to-read-blob-data-in-c-sql-2005 by cc-by-sa and MIT license