Сериализация и работа с документом в базе данных
Одной из задач, которую вам, возможно, придется выполнить при работе с документами, является хранение и извлечение. Document объектов в базу данных и из нее. Например, это необходимо, если вы внедряете какой-либо тип системы управления контентом. Все предыдущие версии документов должны храниться в базе данных. Возможность хранения документов в базе данных также чрезвычайно полезна, когда ваше приложение предоставляет веб-сервис.
Aspose.Words обеспечивает возможность преобразования документа в байтовый массив для последующей работы с этим документом в базе данных.
Преобразование документа в Byte Array
Чтобы сохранить документ в базе данных или подготовить документ для передачи по сети, часто необходимо сериализовать документ, чтобы получить байтовый массив.
Для сериализации Document объект в Aspose.Words:
- Сохранить его в a MemoryStream используя Save метод перегрузки Document класс.
- Звони. 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(); | |
} |