Seriëler maken en werken met een document in een database

Een van de taken die je nodig hebt om gedaan te krijgen wanneer het werken met documenten is opslaan en ophalen Document objecten van en naar een database. Dit zou bijvoorbeeld nodig zijn als u een type content management systeem zou implementeren. Alle vorige versies van documenten moeten in het databasesysteem worden opgeslagen. De mogelijkheid om documenten op te slaan in de database is ook zeer nuttig wanneer uw applicatie biedt een web-based service.

Aspose.Words biedt een mogelijkheid om een document om te zetten in een byte array voor verdere werkzaamheden met dit document in een database.

Een document omzetten naar Byte Array

Om een document op te slaan in een database of om een document voor transmissie over het hele web voor te bereiden, is het vaak noodzakelijk om het document serialiseren om een bytearray te verkrijgen.

Serialiseren van een Document object in Aspose.Words:

  1. Bewaar het voor een MemoryStream met de Save methode overbelasting van de Document Klasse.
  2. Bel de ToArray methode, die een reeks bytes die het document in bytevorm.

De stappen hierboven kunnen dan worden omgekeerd om de bytes terug te laden in een Document object.

Het voorbeeld hieronder laat zien hoe een serialize Document object om een byte array te verkrijgen, en dan hoe de byte array unserialize om een Document object opnieuw:

// 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);

U kunt het sjabloonbestand van dit voorbeeld downloaden van Aspose.Words GitHub.

Een document opslaan, lezen en verwijderen in een database

Deze sectie laat zien hoe een document in een database kan worden opgeslagen en vervolgens weer in een Document object om ermee te werken. Voor eenvoud is de bestandsnaam de sleutel die gebruikt wordt om documenten op te slaan en op te halen uit de database. De database bevat twee kolommen. De eerste kolom wordt opgeslagen als string en wordt gebruikt om documenten te identificeren. De tweede kolom wordt opgeslagen als een BLOB object dat het document object opslaat in de bytevorm.

Het volgende voorbeeld van code laat zien hoe je een verbinding met een database kunt opzetten en commando’s kunt uitvoeren:

// 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();

Het volgende voorbeeld van de code laat zien hoe je een document in de database opslaat, dan hetzelfde document opnieuw leest en uiteindelijk de record met het document uit de database verwijdert:

// 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();

Een document opslaan in een database

Om een document op te slaan in een database zet dit document om in een reeks bytes, zoals beschreven aan het begin van dit artikel. Sla dan deze byte-array op in een databaseveld.

Het volgende voorbeeld van code laat zien hoe je een document opslaat in de gespecificeerde database:

// 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();
}

Specificeer commandoString, wat een SQL expressie is die al het werk doet:

  • Om een document op te slaan in de database, wordt het commando “INSERT INWEN” gebruikt en wordt een tabel opgegeven, samen met de waarden van twee recordvelden “FileName en FileContent.” Om extra parameters te vermijden, wordt de bestandsnaam van de Document Bezwaar tegen zichzelf. De FileContent veldwaarde wordt toegewezen bytes uit de geheugenstroom, die een binaire weergave van het opgeslagen document bevat.
  • De resterende regel van code voert het commando uit dat de Aspose.Words document in de database.

Een document uit een database ophalen

Om een document uit de database op te halen, selecteert u de record die de documentgegevens bevat als een reeks bytes. Laad dan de byte array van de record in MemoryStream en een Document object dat het document van de MemoryStream.

Het volgende voorbeeld van code laat zien hoe u een document kunt ophalen en retourneren uit de opgegeven database met behulp van de bestandsnaam als sleutel om dit document op te halen:

// 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;
}

Een document uit een database verwijderen

Om een document uit de database te verwijderen, gebruik de juiste SQL commando zonder enige manipulaties op de Document object.

Het volgende voorbeeld van code laat zien hoe een document uit de database te verwijderen, met behulp van de bestandsnaam om de record op te halen:

// 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();
}