Серіалізація та робота з документом в базі даних
Одна з завдань, які необхідно зробити при роботі з документами, зберігання та перерозподілу документів Document об’єкти і з бази даних. Наприклад, це буде необхідно, якщо ви запровадили будь-який тип системи управління контентом. Всі попередні версії документів необхідно зберігати в базі даних. Уміння зберігати документи в базі даних також надзвичайно корисно, коли ваша заявка надає послуги на веб-сайті.
Aspose.Words надає можливість конвертувати документ в байтовий масив для подальшої роботи з цим документом в базі даних.
Перетворення документа в Byte Array
Щоб зберігати документ у базі даних або підготувати документ для передачі через веб-сайт, потрібно часто засвідчити документ, щоб отримати байтовий масив.
Для серіалізації Document об’єкт в Aspose.Words:
1,1 км Збережіть його в MemoryStream використання Save метод перевантаження Document клас. 1,1 км Дзвоните до 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(); | |
} |
Вкажіть командуString, який є виразом SQL, який робить всі роботи:
- до Щоб зберегти документ у базу даних, використовується команда “INSERT INTO” та таблиця, вказаний разом з значеннями двох облікових полів – FileName та FileContent. Щоб уникнути додаткових параметрів, ім’я файлу береться з Document сам об’єкт. Про нас
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(); | |
} |