Сериализация и работа с документом в базе данных

Одной из задач, которую вам, возможно, придется выполнить при работе с документами, является хранение и извлечение. Document объектов в базу данных и из нее. Например, это необходимо, если вы внедряете какой-либо тип системы управления контентом. Все предыдущие версии документов должны храниться в базе данных. Возможность хранения документов в базе данных также чрезвычайно полезна, когда ваше приложение предоставляет веб-сервис.

Aspose.Words обеспечивает возможность преобразования документа в байтовый массив для последующей работы с этим документом в базе данных.

Преобразование документа в Byte Array

Чтобы сохранить документ в базе данных или подготовить документ для передачи по сети, часто необходимо сериализовать документ, чтобы получить байтовый массив.

Для сериализации Document объект в Aspose.Words:

  1. Сохранить его в a MemoryStream используя Save метод перегрузки Document класс.
  2. Звони. ToArray метод, который возвращает массив байтов, представляющих документ в байтовой форме.

Вышеуказанные шаги затем можно перевернуть, чтобы загрузить байты обратно в Document объект.

В приведенном ниже примере показано, как сериализовать Document объект для получения байтового массива, а затем как разсериализировать байтовый массив для получения Document Опять возражение:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET
// The path to the documents directory.
string dataDir = RunExamples.GetDataDir_LoadingAndSaving();
// Load the document from disk.
Document doc = new Document(dataDir + "Test File (doc).doc");
// Create a new memory stream.
MemoryStream outStream = new MemoryStream();
// Save the document to stream.
doc.Save(outStream, SaveFormat.Docx);
// Convert the document to byte form.
byte[] docBytes = outStream.ToArray();
// The bytes are now ready to be stored/transmitted.
// Now reverse the steps to load the bytes back into a document object.
MemoryStream inStream = new MemoryStream(docBytes);
// Load the stream into a new document object.
Document loadDoc = new Document(inStream);

Вы можете скачать файл шаблона этого примера из Aspose.Words GitHub.

Хранить, читать и удалять документ в базе данных

В этом разделе показано, как сохранить документ в базе данных, а затем загрузить его обратно в базу данных. Document Объект для работы с ним. Для простоты имя файла - это ключ, используемый для хранения и извлечения документов из базы данных. База данных содержит две колонки. Первая колонка “Имя файла” хранится в виде строки и используется для идентификации документов. Вторая колонка “FileContent” хранится в виде BLOB объект, который хранит объект документа в байтовой форме.

Следующий пример кода показывает, как настроить соединение с базой данных и выполнить команды:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET
string dbName = "";
// Open a database connection.
string connString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + RunExamples.GetDataDir_Database() + dbName;
OleDbConnection mConnection = new OleDbConnection(connString);
mConnection.Open();

Следующий пример кода показывает, как сохранить документ в базу данных, затем снова прочитать тот же документ и, наконец, удалить запись, содержащую документ из базы данных:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET
// Store the document to the database.
StoreToDatabase(doc, mConnection);
// Read the document from the database and store the file to disk.
Document dbDoc = ReadFromDatabase(fileName, mConnection);
// Save the retrieved document to disk.
string newFileName = Path.GetFileNameWithoutExtension(fileName) + " from DB" + Path.GetExtension(fileName);
dbDoc.Save(dataDir + newFileName);
// Delete the document from the database.
DeleteFromDatabase(fileName, mConnection);
// Close the connection to the database.
mConnection.Close();

Сохранить документ в базу данных

Для сохранения документа в базе данных преобразуйте этот документ в массив байтов, как описано в начале данной статьи. Затем сохраните этот байтовый массив в поле базы данных.

Следующий пример кода показывает, как сохранить документ в указанной базе данных:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET
public static void StoreToDatabase(Document doc, OleDbConnection mConnection)
{
// Save the document to a MemoryStream object.
MemoryStream stream = new MemoryStream();
doc.Save(stream, SaveFormat.Docx);
// Get the filename from the document.
string fileName = Path.GetFileName(doc.OriginalFileName);
// Create the SQL command.
string commandString = "INSERT INTO Documents (FileName, FileContent) VALUES('" + fileName + "', @Docx)";
OleDbCommand command = new OleDbCommand(commandString, mConnection);
// Add the @Docx parameter.
command.Parameters.AddWithValue("Docx", stream.ToArray());
// Write the document to the database.
command.ExecuteNonQuery();
}

Укажите командную строку, которая является выражением SQL, выполняющим всю работу:

  • Для сохранения документа в базе данных используется команда “INSERT INTO” и указанная таблица вместе со значениями двух полей записи - FileName и FileContent. Чтобы избежать дополнительных параметров, имя файла берется из Document сам объект. The FileContent Значение поля присваивается байтами из потока памяти, который содержит двоичное представление сохраненного документа.
  • Оставшаяся строка кода выполняет команду, которая хранит Aspose.Words документ в базе данных.

Восстановление документа из базы данных

Чтобы извлечь документ из базы данных, выберите запись, содержащую данные документа, в виде массива байтов. После этого снимите байт с пластинки. MemoryStream и создать Document объект, который будет загружать документ из MemoryStream.

Следующий пример кода показывает, как извлечь и вернуть документ из указанной базы данных, используя имя файла в качестве ключа для получения этого документа:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET
public static Document ReadFromDatabase(string fileName, OleDbConnection mConnection)
{
// Create the SQL command.
string commandString = "SELECT * FROM Documents WHERE FileName='" + fileName + "'";
OleDbCommand command = new OleDbCommand(commandString, mConnection);
// Create the data adapter.
OleDbDataAdapter adapter = new OleDbDataAdapter(command);
// Fill the results from the database into a DataTable.
DataTable dataTable = new DataTable();
adapter.Fill(dataTable);
// Check there was a matching record found from the database and throw an exception if no record was found.
if (dataTable.Rows.Count == 0)
throw new ArgumentException(string.Format("Could not find any record matching the document \"{0}\" in the database.", fileName));
// The document is stored in byte form in the FileContent column.
// Retrieve these bytes of the first matching record to a new buffer.
byte[] buffer = (byte[])dataTable.Rows[0]["FileContent"];
// Wrap the bytes from the buffer into a new MemoryStream object.
MemoryStream newStream = new MemoryStream(buffer);
// Read the document from the stream.
Document doc = new Document(newStream);
// Return the retrieved document.
return doc;
}

Удалить документ из базы данных

Чтобы удалить документ из базы данных, используйте соответствующую команду SQL без каких-либо манипуляций. Document объект.

Следующий пример кода показывает, как удалить документ из базы данных, используя имя файла для получения записи:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET
public static void DeleteFromDatabase(string fileName, OleDbConnection mConnection)
{
// Create the SQL command.
string commandString = "DELETE * FROM Documents WHERE FileName='" + fileName + "'";
OleDbCommand command = new OleDbCommand(commandString, mConnection);
// Delete the record.
command.ExecuteNonQuery();
}