Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Екзамен з комп. арх..doc
Скачиваний:
4
Добавлен:
17.09.2019
Размер:
449.02 Кб
Скачать

28. Характеристика під’єднаних класів технології ado.Net.

В ADO.NET существует две модели работы с данными: присоединенная и отсоединенная модель . Традиционной моделью работы с данными является присоединенная модель. Работа присоединенной модели заключается в том, что приложение, открывая связь с поставщиком данных, остается на связи с ним на протяжении всего времени работы. Плюсом этой концепции является скорость работы с данными и их актуальность, а основным минусом – постоянное выделение ресурсов под соединение, что в случае с большим количеством подключений может вызвать серьезную перегрузку поставщика данных.

Классы подсоединенных объектов обеспечивают установление соединения с БД и управление данными со стороны приложения.

29. Завантаження бінарних об’єктів у базу даних та вивантаження їх із неї.

По умолчанию объект DataReader загружает входящие данные в виде строки, как только вся строка данных будет в наличии. Однако для больших двоичных объектов (BLOB) требуется другая процедура, поскольку они могут содержать гигабайты данных, которые невозможно уместить в одной строке. Метод Command.ExecuteReaderимеет перегрузку, которая принимает аргумент CommandBehavior, чтобы изменять характер действий объекта DataReader по умолчанию. Аргумент SequentialAccessможно передать методу ExecuteReader, чтобы изменить характер действий объекта DataReader по умолчанию, чтобы он загружал не строки данных, а последовательно сами данные по мере их поступления. Вместо загрузки всей строки, SequentialAccess позволяет DataReader загрузить данные как поток. Затем можно использовать метод GetBytes или метод GetChars, чтобы указать положение байта для начала операции чтения и ограниченный размер буфера для возврата данных.

The publisher ID (pub_id) is a character field, and the logo is an image, which is a BLOB

int bufferSize = 100; byte[] outByte = new byte[bufferSize]; long retval; long startIndex = 0; string pubID = ""; connection.Open();

SqlCommand command = new SqlCommand("SELECT pub_id, logo FROM pub_info", connection); SqlDataReader reader = command.ExecuteReader(CommandBehavior.SequentialAccess); while (reader.Read()){ pubID = reader.GetString(0); // Create a file to hold the output. stream=new FileStream("logo"+pubID+".bmp", FileMode.OpenOrCreate, FileAccess.Write); writer = new BinaryWriter(stream); // Reset the starting byte for the new BLOB. startIndex = 0; // Read bytes into outByte[] and retain the number of bytes returned. retval = reader.GetBytes(1, startIndex, outByte, 0, bufferSize); // Continue while there are bytes beyond the size of the buffer. while (retval == bufferSize){ writer.Write(outByte); writer.Flush(); // Reposition start index to end of last buffer and fill buffer. startIndex += bufferSize; retval = reader.GetBytes(1, startIndex, outByte, 0, bufferSize); } // Write the remaining buffer. writer.Write(outByte, 0, (int)retval - 1); writer.Flush(); writer.Close(); stream.Close(); }

Большой двоичный объект (BLOB) можно записывать в базу данных в виде двоичных или символьных данных в зависимости от типа поля источника данных. BLOB — это общий термин для типов данных text, ntext и image, используемых, как правило, для хранения документов и изображений.

Чтобы записать значение BLOB в базу данных, выполните соответствующую инструкцию INSERT или UPDATE, передав значение BLOB в качестве входного параметра.

public static void AddEmployee(int pub_id, string photoFilePath) { byte[] photo = GetPhoto(photoFilePath); using (SqlConnection connection = new SqlConnection( connectionString)) SqlCommand command = new SqlCommand( "INSERT INTO pub_info (pub_id, logo) " + "Values(@pub_id, @logo), connection); command.Parameters.Add("@pub_id", SqlDbType.Int).Value = pub_id; command.Parameters.Add("@logo", SqlDbType.Image, photo.Length).Value = photo; connection.Open(); command.ExecuteNonQuery(); } }