none
не могу разобраться как читать данные с тип данных Image RRS feed

  • Вопрос

  • Добрый день, есть база геоданых(ArcGIS - может кто поймет, что мне надо), так вот есть справочник(Домен) хранится в одной таблице - Codeddomain(DomainID int, CodedValues image).
    надо прочитать содержимое этой таблицы(а именно столбец с Image), средствами - ArcGIS можно прочитать, но надо средствами ADO.Net. Господа профи, прошу вас мне помочь!!!
    Большое спасибо!!!
    • Перемещено Siddharth Chavan 1 октября 2010 г. 21:03 MSDN Forums Consolidation (От:Технологии .NET Framework: ADO.NET, WCF, WPF etc)
    5 августа 2010 г. 5:09

Ответы

  • Добрый день.

    Если image  - это аналог blob поля, то можно прочитать его как массив байтов.

    http://codegain.com/articles/csharp/howto/working-with-sql-server-blob-data-in-net.aspx

    static
     byte
    [] RetrieveFile(string
     filename)
    {
    SqlConnection connection = new SqlConnection
    ("Server=(local) ; " +
    "Initial Catalog = FileStore ; " +
    "Integrated Security = SSPI" );

    SqlCommand command = new SqlCommand
    ("SELECT * FROM MyFiles WHERE Filename=@Filename" ,
    connection);

    command.Parameters.AddWithValue("@Filename" , filename);

    connection.Open();

    SqlDataReader reader =
    command.ExecuteReader
    (System.Data.CommandBehavior.SequentialAccess);

    reader.Read();

    MemoryStream memory = new MemoryStream();
    long startIndex = 0 ;
    const int ChunkSize = 256 ;
    while (true )
    {
    byte [] buffer = new byte [ChunkSize];
    long retrievedBytes =
    reader.GetBytes
    (1 , startIndex, buffer, 0 , ChunkSize);

    memory.Write(buffer, 0 , (int )retrievedBytes);

    startIndex += retrievedBytes;
    if (retrievedBytes != ChunkSize)
    break ;
    }

    connection.Close();
    byte [] data = memory.ToArray();

    memory.Dispose();
    return data;
    }
    • Помечено в качестве ответа I.Vorontsov 25 августа 2010 г. 13:15
    6 августа 2010 г. 8:28

Все ответы

  • Добрый день.

    Если image  - это аналог blob поля, то можно прочитать его как массив байтов.

    http://codegain.com/articles/csharp/howto/working-with-sql-server-blob-data-in-net.aspx

    static
     byte
    [] RetrieveFile(string
     filename)
    {
    SqlConnection connection = new SqlConnection
    ("Server=(local) ; " +
    "Initial Catalog = FileStore ; " +
    "Integrated Security = SSPI" );

    SqlCommand command = new SqlCommand
    ("SELECT * FROM MyFiles WHERE Filename=@Filename" ,
    connection);

    command.Parameters.AddWithValue("@Filename" , filename);

    connection.Open();

    SqlDataReader reader =
    command.ExecuteReader
    (System.Data.CommandBehavior.SequentialAccess);

    reader.Read();

    MemoryStream memory = new MemoryStream();
    long startIndex = 0 ;
    const int ChunkSize = 256 ;
    while (true )
    {
    byte [] buffer = new byte [ChunkSize];
    long retrievedBytes =
    reader.GetBytes
    (1 , startIndex, buffer, 0 , ChunkSize);

    memory.Write(buffer, 0 , (int )retrievedBytes);

    startIndex += retrievedBytes;
    if (retrievedBytes != ChunkSize)
    break ;
    }

    connection.Close();
    byte [] data = memory.ToArray();

    memory.Dispose();
    return data;
    }
    • Помечено в качестве ответа I.Vorontsov 25 августа 2010 г. 13:15
    6 августа 2010 г. 8:28
  • Добрый день.

    Если image  - это аналог blob поля, то можно прочитать его как массив байтов.

    http://codegain.com/articles/csharp/howto/working-with-sql-server-blob-data-in-net.aspx

    static
    
     byte
    
    [] RetrieveFile(string
    
     filename)
    {
    SqlConnection connection = new SqlConnection
    ("Server=(local) ; " +
    "Initial Catalog = FileStore ; " +
    "Integrated Security = SSPI" );

    SqlCommand command = new SqlCommand
    ("SELECT * FROM MyFiles WHERE Filename=@Filename" ,
    connection);

    command.Parameters.AddWithValue("@Filename" , filename);

    connection.Open();

    SqlDataReader reader =
    command.ExecuteReader
    (System.Data.CommandBehavior.SequentialAccess);

    reader.Read();

    MemoryStream memory = new MemoryStream();
    long startIndex = 0 ;
    const int ChunkSize = 256 ;
    while (true )
    {
    byte [] buffer = new byte [ChunkSize];
    long retrievedBytes =
    reader.GetBytes
    (1 , startIndex, buffer, 0 , ChunkSize);

    memory.Write(buffer, 0 , (int )retrievedBytes);

    startIndex += retrievedBytes;
    if (retrievedBytes != ChunkSize)
    break ;
    }

    connection.Close();
    byte [] data = memory.ToArray();

    memory.Dispose();
    return data;
    }
    спасибо, но еще один вопрос такой - как теперь переобразовать его в текст? полученный массив
    10 августа 2010 г. 2:48
  • Я делаю так -

     

    Dim intBlobColumnNo As Integer = 1

     

    Dim intChunkSize As Integer = 8192

     

    Dim intOffset As Integer = 0

     

    Dim intBytesRet As Integer

     

    Dim BinnaryBLOB(intChunkSize) As Byte

     

    Dim strPathFile As String = "D:\\aaa.jpg"

     

    Dim filOutPut As New IO.FileStream(strPathFile, IO.FileMode.OpenOrCreate)

     

    Try

              cn.Open()

     

    Catch ex As Exception

     

    End Try

     

    Using Cmd_Read As New OleDbCommand("select * from dbo.Test_Table where Name = 'bbb'", cn)

     

    Dim reader As OleDbDataReader = Cmd_Read.ExecuteReader(CommandBehavior.SequentialAccess)

           reader.Read()

     

          Do

                    intBytesRet =

    CInt(reader.GetBytes(intBlobColumnNo, intOffset, BinnaryBLOB, 0, intChunkSize))

     

                   If intBytesRet > 0 Then

                           filOutPut.Write(BinnaryBLOB, 0, intBytesRet)

     

                   End If

                  intOffset += intBytesRet

     

          Loop Until intBytesRet <> intChunkSize

     

    End Using

    правильный ли алгоритм?

    10 августа 2010 г. 3:23