Sérializovat a pracovat s dokumentem v databázi

Jedním z úkolů, které budete muset udělat při práci s dokumenty je ukládání a získávání Document objekty do a z databáze. To by bylo například nezbytné, kdybyste prováděli jakýkoliv typ systému řízení obsahu. Všechny předchozí verze dokumentů musí být uloženy v databázovém systému. Schopnost ukládat dokumenty v databázi je také velmi užitečná, když vaše aplikace poskytuje webovou službu.

Aspose.Words poskytuje schopnost převést dokument do pole byte pro následnou práci s tímto dokumentem v databázi.

Převést dokument na Byte Array

Chcete-li dokument uložit do databáze nebo připravit dokument pro přenos přes web, je často nutné serializovat dokument pro získání byte pole.

Serializovat Document objekt v Aspose.Words:

  1. Uložit do MemoryStream s použitím Save způsob přetížení Document třída.
  2. Zavolejte ToArray metoda, která vrací pole bytů představující dokument ve formě byte.

Schody nad ním pak mohou být obráceny k načtení bytů zpět do Document objekt.

Následující příklad ukazuje, jak serializovat Document objekt k získání byte pole, a pak, jak odsérializovat byte pole získat Document znovu objekt:

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

Můžete si stáhnout soubor šablony tohoto příkladu z Aspose.Words GitHub.

Uložit, číst a smazat dokument v databázi

Tato sekce ukazuje, jak uložit dokument do databáze a pak jej načíst zpět do Document objekt pro práci s ním. Pro jednoduchost je název souboru klíčem k ukládání a získávání dokumentů z databáze. Databáze obsahuje dva sloupce. První sloupec “FileName” je uložen jako řetězec a používá se k identifikaci dokumentů. Druhý sloupec je uložen jako BLOB objekt, který uloží objekt dokumentu do bajtové formy.

Následující příklad kódu ukazuje, jak nastavit připojení k databázi a provést příkazy:

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

Následující příklad kódu ukazuje, jak uložit dokument do databáze, pak znovu přečíst stejný dokument a nakonec odstranit záznam obsahující dokument z databáze:

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

Uložit dokument do databáze

Uložit dokument v databázi převést tento dokument do pole bytů, jak je popsáno na začátku tohoto článku. Pak uložte toto pole byte do databázového pole.

Následující příklad kódu ukazuje, jak uložit dokument do zadané databáze:

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

Zadejte příkazString, což je SQL výraz, který dělá všechnu práci:

  • Pro uložení dokumentu do databáze se používá příkaz Aby se zabránilo dalším parametrům, je název souboru převzat z Document sám objekt. • FileContent hodnota pole je přiřazena byte z paměti proud, který obsahuje binární reprezentaci uloženého dokumentu.
  • Zbývající řádek kódu provádí příkaz, který ukládá Aspose.Words dokument v databázi.

Získání dokumentu z databáze

Chcete-li získat dokument z databáze, vyberte záznam, který obsahuje data dokumentu jako pole bajtů. Pak načíst byte pole ze záznamu do MemoryStream a vytvořit Document objekt, který bude načíst dokument z MemoryStream.

Následující příklad kódu ukazuje, jak získat a vrátit dokument ze zadané databáze pomocí názvu souboru jako klíč k získání tohoto dokumentu:

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

Smazat dokument z databáze

Pro odstranění dokumentu z databáze použijte příslušný příkaz SQL bez manipulace na Document objekt.

Následující příklad kódu ukazuje, jak odstranit dokument z databáze pomocí názvu souboru pro získání záznamu:

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