Serializar e trabalhar com um documento em um banco de dados
Uma das tarefas que você pode precisar realizar ao trabalhar com documentos é armazenar e recuperar objetos Document de e para um banco de dados. Por exemplo, isso seria necessário se você estivesse implementando qualquer tipo de sistema de gerenciamento de conteúdo. Todas as versões anteriores dos documentos devem ser armazenadas no sistema de banco de dados. A capacidade de armazenar documentos no banco de dados também é extremamente útil quando seu aplicativo fornece um serviço baseado na web.
Aspose.Words oferece a capacidade de converter um documento em uma matriz de bytes para trabalho posterior com esse documento em um banco de dados.
Converter um documento em matriz de bytes
Para armazenar um documento em um banco de dados ou preparar um documento para transmissão pela web, muitas vezes é necessário serializar o documento para obter uma matriz de bytes.
Para serializar um objeto Document em Aspose.Words:
- Salve-o em um MemoryStream usando a sobrecarga do método Save da classe Document.
- Chame o método ToArray, que retorna uma matriz de bytes que representa o documento em formato de byte.
As etapas acima podem ser revertidas para carregar os bytes de volta em um objeto Document.
O exemplo abaixo mostra como serializar um objeto Document para obter uma matriz de bytes e, em seguida, como desserializar a matriz de bytes para obter um objeto Document novamente:
// 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); |
Você pode baixar o arquivo de modelo deste exemplo em Aspose.Words GitHub.
Armazenar, ler e excluir um documento em um banco de dados
Esta seção mostra como salvar um documento em um banco de dados e depois carregá-lo de volta em um objeto Document
para trabalhar com ele. Para simplificar, o nome do arquivo é a chave usada para armazenar e buscar documentos do banco de dados. O banco de dados contém duas colunas. A primeira coluna “FileName” é armazenada como uma String e é usada para identificar documentos. A segunda coluna “FileContent” é armazenada como um objeto BLOB
que armazena o objeto do documento na forma de byte.
O exemplo de código a seguir mostra como configurar uma conexão com um banco de dados e executar comandos:
// 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(); |
O exemplo de código a seguir mostra como salvar um documento no banco de dados, depois ler o mesmo documento novamente e, por fim, excluir o registro que contém o documento do banco de dados:
// 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(); |
Salvar um documento em um banco de dados
Para salvar um documento em um banco de dados converta este documento em um array de bytes, conforme descrito no início deste artigo. Em seguida, salve esta matriz de bytes em um campo do banco de dados.
O exemplo de código a seguir mostra como salvar um documento no banco de dados especificado:
// 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(); | |
} |
Especifique commandString, que é uma expressão SQL que faz todo o trabalho:
- Para salvar um documento no banco de dados, é utilizado o comando “INSERT INTO” e uma tabela especificada junto com os valores de dois campos de registro – FileName e FileContent. Para evitar parâmetros adicionais, o nome do arquivo é retirado do próprio objeto Document. O valor do campo
FileContent
recebe bytes do fluxo de memória, que contém uma representação binária do documento armazenado. - A linha restante do código executa o comando que armazena o documento Aspose.Words no banco de dados.
Recuperar um documento de um banco de dados
Para recuperar um documento do banco de dados, selecione o registro que contém os dados do documento como uma matriz de bytes. Em seguida, carregue a matriz de bytes do registro no MemoryStream e crie um objeto Document que carregará o documento do MemoryStream.
O exemplo de código a seguir mostra como recuperar e retornar um documento do banco de dados especificado usando o nome do arquivo como chave para buscar esse documento:
// 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; | |
} |
Excluir um documento de um banco de dados
Para excluir um documento do banco de dados, use o comando SQL apropriado sem qualquer manipulação no objeto Document.
O exemplo de código a seguir mostra como excluir um documento do banco de dados, usando o nome do arquivo para buscar o registro:
// 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(); | |
} |