Serializați și lucrați cu un document într-o bază de date
Unul dintre sarcinile pe care le puteți avea de realizat atunci când lucrați cu documente este stocarea și recuperarea Document obiecte dintr-o bază de date. De exemplu, acest lucru ar fi necesar dacă implementați orice tip de sistem de gestionare a conținutului. Toate versiunile anterioare ale documentelor trebuie stocate în sistemul de baze de date. Posibilitatea de a stoca documente în baza de date este, de asemenea, extrem de utilă atunci când aplicația dvs. oferă un serviciu bazat pe web.
Aspose.Words oferă capacitatea de a converti un document într-un tablou de octeți pentru o lucru ulterioară cu acest document într-o bază de date.
Convertește un document într-un byte array
Pentru a stoca un document într-o bază de date sau pentru a pregăti un document pentru transmiterea pe web, este adesea necesar să serializați documentul pentru a obține o matrice de octeți.
Pentru a serializa o Document obiect în Aspose.Words:
- Salvează-l la o MemoryStream folosind metoda suprascrisă Save din clasa Document.
- Apelati metoda ToArray, care returneaza un tablou de octeti reprezentând documentul în forma octetilor.
Pașii de mai sus pot fi apoi inversați pentru a încărca din nou octeții în Document obiect.
Exemplul de mai jos arată cum se serializează o Document obiect pentru a obține un tablou de octeți și apoi cum se deserializează tabloul de octeți pentru a obține din nou un Document obiect:
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET.git. | |
Document doc = new Document(MyDir + "Document.docx"); | |
MemoryStream outStream = new MemoryStream(); | |
doc.Save(outStream, SaveFormat.Docx); | |
byte[] docBytes = outStream.ToArray(); | |
MemoryStream inStream = new MemoryStream(docBytes); | |
Document docFromBytes = new Document(inStream); |
Poţi descărca fişierul şablon al acestui exemplu de la Aspose.Words GitHub.
Stochează, citește și șterge un document într-o bază de date
Această secţiune arată cum să salvezi un document într-o bază de date şi apoi să-l încarci înapoi într-un obiect Document
pentru a lucra cu el. Pentru simplitate, numele fișierului este cheia folosită pentru a stoca și a obține documente din baza de date. Baza de date conține două coloane. Prima coloană, “NumeFișier”, este stocată ca o șir și este utilizată pentru a identifica documentele. “A doua coloană “FileContent” este stocată ca un BLOB
obiect care stochează obiectul document în formă de octet.”
Exemplul de cod următor arată cum se stabilește o conexiune la o bază de date și se execută comenzile:
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET.git. | |
string connString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + DatabaseDir + "Northwind.accdb"; | |
OleDbConnection connection = new OleDbConnection(connString); | |
connection.Open(); |
Exemplul de cod următor arată cum să salvezi un document în baza de date, apoi să citești din nou același document și, în final, să ștergi înregistrarea care conține documentul din baza de date:
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET.git. | |
StoreToDatabase(doc, connection); | |
Document dbDoc = ReadFromDatabase("Document.docx", connection); | |
dbDoc.Save(ArtifactsDir + "WorkingWithDocumentInDatabase.LoadAndSaveDocToDatabase.docx"); | |
DeleteFromDatabase("Document.docx", connection); | |
connection.Close(); |
Salvează un document într-o bază de date
Pentru a salva un document într-o bază de date converti acest document într-un tablou de octeți așa cum se descrie la începutul acestui articol. Apoi, salvează acest tablou de octeți într-un câmp al bazei de date.
Exemplul de cod de mai jos arată cum să salvezi un document în baza de date specificată:
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET.git. | |
public void StoreToDatabase(Document doc, OleDbConnection connection) | |
{ | |
MemoryStream stream = new MemoryStream(); | |
doc.Save(stream, SaveFormat.Docx); | |
string fileName = Path.GetFileName(doc.OriginalFileName); | |
string commandString = "INSERT INTO Documents (Name, Data) VALUES('" + fileName + "', @Doc)"; | |
OleDbCommand command = new OleDbCommand(commandString, connection); | |
command.Parameters.AddWithValue("Doc", stream.ToArray()); | |
command.ExecuteNonQuery(); | |
} |
Specificați ‘commandString’, care este o expresie SQL care face toată munca:
- Pentru salvarea unui document în baza de date, se folosește comanda “INSERT INTO” și se specifică o masă împreună cu valorile a două câmpuri de înregistrare - FileName și FileContent. Pentru a evita parametri suplimentari, numele fișierului este luat din Document obiect în sine. Valoarea câmpului
FileContent
este atribuită octeți din fluxul de memorie, care conține o reprezentare binară a documentului stocat. - Linia rămasă de cod execută comanda care stochează Aspose.Words documentul în baza de date.
Recuperează un document dintr-o bază de date
Pentru a recupera un document din baza de date, selectați înregistrarea care conține datele documentului ca o matrice de octeți. Apoi încărcaţi tabloul de octeţi din înregistrare în MemoryStream şi creati o Document obiect care va încărca documentul din MemoryStream.
Exemplul următor de cod arată cum să se recupereze şi să se returneze un document din baza de date specificată folosind numele fișierului ca o cheie pentru a obține acest document:
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET.git. | |
public Document ReadFromDatabase(string fileName, OleDbConnection connection) | |
{ | |
string commandString = "SELECT * FROM Documents WHERE Name='" + fileName + "'"; | |
OleDbCommand command = new OleDbCommand(commandString, connection); | |
OleDbDataAdapter adapter = new OleDbDataAdapter(command); | |
DataTable dataTable = new DataTable(); | |
adapter.Fill(dataTable); | |
if (dataTable.Rows.Count == 0) | |
throw new ArgumentException( | |
$"Could not find any record matching the document \"{fileName}\" in the database."); | |
// 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]["Data"]; | |
MemoryStream newStream = new MemoryStream(buffer); | |
Document doc = new Document(newStream); | |
return doc; | |
} |
Șterge un document dintr-o bază de date
Pentru a şterge un document din baza de date, folosiţi comanda SQL corespunzătoare fără nicio manipulare asupra obiectului Document.
Exemplul următor de cod arată cum să ștergeți un document din baza de date utilizând numele fișierului pentru a obține înregistrarea:
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET.git. | |
public void DeleteFromDatabase(string fileName, OleDbConnection connection) | |
{ | |
string commandString = "DELETE * FROM Documents WHERE Name='" + fileName + "'"; | |
OleDbCommand command = new OleDbCommand(commandString, connection); | |
command.ExecuteNonQuery(); | |
} |