ashishsri Ответов: 1

Как получить двоичные данные из типа данных bytea в postgres


У нас есть данные в сериализованной двоичной форме.Теперь мы должны хранить его в базе данных PostGre.
Для вставки мы сохранили код в столбце данных bytea .
И используйте следующий код:
using (FileStream pgFileStream = new FileStream("F:\\Test.abc", FileMode.Open, FileAccess.Read))
            {
                using (BinaryReader pgReader = new BinaryReader(new BufferedStream(pgFileStream)))
                {

                    NpgsqlCommand command = new NpgsqlCommand();

                    byte[] ByteA = pgReader.ReadBytes(Convert.ToInt32(pgFileStream.Length));
                    command.CommandText = "insert into ptadata (memberid, filedata) VALUES (03, @data)";
                    command.Connection = m_IDBcloudConnection;

                    //m_IDBcloudConnection.Close();
                    if (m_IDBcloudConnection.State != ConnectionState.Open)
                    {
                        m_IDBcloudConnection.Open();
                    }                    
                    command.Parameters.Add("@data", ByteA).Value = ByteA;

                    command.ExecuteNonQuery();

                    m_IDBcloudConnection.Close();
                }
            }
Но когда мы пытаемся извлечь его ,приходит в виде байта.
Как я могу получить данные в сериализованной двоичной форме?

Что я уже пробовал:

using (FileStream pgFileStream = new FileStream("F:\\Test.abc", FileMode.Open, FileAccess.Read))
            {
                using (BinaryReader pgReader = new BinaryReader(new BufferedStream(pgFileStream)))
                {

                    NpgsqlCommand command = new NpgsqlCommand();

                    byte[] ByteA = pgReader.ReadBytes(Convert.ToInt32(pgFileStream.Length));
                    command.CommandText = "insert into ptadata (memberid, filedata) VALUES (03, @data)";
                    command.Connection = m_IDBcloudConnection;

                    //m_IDBcloudConnection.Close();
                    if (m_IDBcloudConnection.State != ConnectionState.Open)
                    {
                        m_IDBcloudConnection.Open();
                    }                    
                    command.Parameters.Add("@data", ByteA).Value = ByteA;

                    command.ExecuteNonQuery();

                    m_IDBcloudConnection.Close();
                }
            } 

Afzaal Ahmad Zeeshan

Но зачем хранить данные в базе данных? Почему большой двоичный объект не может быть сохранен в файловой системе, а его отношение (путь к файлу) - в записи с символьным типом данных?

ashishsri

На самом деле я хочу сохранить наш проект в postgre, а проект-это двоичный сериализованный файл.
в базе данных postgre нет типа данных blob, поэтому мы используем тип данных bytea в postgre.

1 Ответов

Рейтинг:
2

Maciej Los

Посмотрите на это: sql - как вставить и извлечь изображение из PostgreSql с помощью C# - Stack Overflow[^]

Процесс вставки и извлечения изображения - это процесс работы с двоичными данными. Итак, он соответствует вашим критериям.

Удачи вам!