Veritabanındaki Bir Belgeyi Serileştirme ve Çalışma
Belgelerle çalışırken yapmanız gerekebilecek görevlerden biri, Document nesnelerini veritabanına depolamak ve veritabanından almaktır. Örneğin herhangi bir türde içerik yönetim sistemi uyguluyorsanız bu gerekli olacaktır. Belgelerin önceki tüm sürümleri veritabanı sisteminde saklanmalıdır. Belgeleri veritabanında saklama yeteneği, uygulamanız web tabanlı bir hizmet sağladığında da son derece kullanışlıdır.
Aspose.Words, bir belgeyi veritabanında bu belgeyle daha sonra çalışmak üzere bir bayt dizisine dönüştürme yeteneği sağlar.
Belgeyi Bayt Dizisine Dönüştürme
Bir belgeyi bir veritabanında saklamak veya bir belgeyi web üzerinden aktarıma hazırlamak için, genellikle bir bayt dizisi elde etmek amacıyla belgenin serileştirilmesi gerekir.
Bir Document nesnesini Aspose.Words’de serileştirmek için:
- Document sınıfının Save yöntemi aşırı yüklemesini kullanarak bunu bir MemoryStream‘e kaydedin.
- Belgeyi bayt biçiminde temsil eden bir bayt dizisini döndüren ToArray yöntemini çağırın.
Baytları tekrar Document nesnesine yüklemek için yukarıdaki adımlar tersine çevrilebilir.
Aşağıdaki örnek, bir bayt dizisi elde etmek için bir Document nesnesinin nasıl serileştirileceğini ve ardından tekrar bir Document nesnesi elde etmek için bayt dizisinin serileştirilmesinin nasıl yapılacağını gösterir:
// 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); |
Bu örneğin şablon dosyasını Aspose.Words GitHub‘ten indirebilirsiniz.
Bir Belgeyi Veritabanında Saklayın, Okuyun ve Silin
Bu bölümde bir belgenin veritabanına nasıl kaydedileceği ve daha sonra onunla çalışmak üzere bir Document
nesnesine nasıl geri yükleneceği gösterilmektedir. Basitlik açısından, dosya adı, belgeleri veritabanından depolamak ve almak için kullanılan anahtardır. Veritabanı iki sütun içerir. İlk sütun “DosyaAdı” bir Dize olarak saklanır ve belgeleri tanımlamak için kullanılır. İkinci sütun “FileContent”, belge nesnesini bayt biçiminde saklayan bir BLOB
nesnesi olarak saklanır.
Aşağıdaki kod örneği, bir veritabanına nasıl bağlantı kurulacağını ve komutların nasıl yürütüleceğini gösterir:
// 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(); |
Aşağıdaki kod örneği, bir belgenin veritabanına nasıl kaydedileceğini, ardından aynı belgenin yeniden okunacağını ve son olarak belgeyi içeren kaydın veritabanından nasıl silineceğini gösterir:
// 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(); |
Belgeyi Veritabanına Kaydetme
Bir belgeyi veritabanına kaydetmek için, bu makalenin başında açıklandığı gibi bu belgeyi bir bayt dizisine dönüştürün. Daha sonra bu bayt dizisini bir veritabanı alanına kaydedin.
Aşağıdaki kod örneği, bir belgenin belirtilen veritabanına nasıl kaydedileceğini gösterir:
// 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(); | |
} |
Tüm işi yapan bir SQL ifadesi olan commandString’i belirtin:
- Bir belgeyi veritabanına kaydetmek için “INSERT INTO” komutu kullanılır ve iki kayıt alanının (DosyaAdı ve Dosyaİçeriği) değerleriyle birlikte bir tablo belirtilir. Ek parametrelerden kaçınmak için dosya adı Document nesnesinin kendisinden alınır.
FileContent
alan değerine, saklanan belgenin ikili gösterimini içeren bellek akışından baytlar atanır. - Geriye kalan kod satırı, Aspose.Words belgesini veritabanında saklayan komutu çalıştırır.
Veritabanından Belge Alma
Veritabanından bir belgeyi almak için, belge verilerini bir bayt dizisi olarak içeren kaydı seçin. Daha sonra bayt dizisini kayıttan MemoryStream‘e yükleyin ve belgeyi MemoryStream‘ten yükleyecek bir Document nesnesi oluşturun.
Aşağıdaki kod örneği, bu belgeyi getirmek için dosya adını anahtar olarak kullanarak belirtilen veritabanından bir belgenin nasıl alınacağını ve döndürüleceğini gösterir:
// 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; | |
} |
Veritabanından Bir Belgeyi Silme
Veritabanından bir belgeyi silmek için Document nesnesinde herhangi bir değişiklik yapmadan uygun SQL komutunu kullanın.
Aşağıdaki kod örneği, kaydı getirmek için dosya adını kullanarak bir belgenin veritabanından nasıl silineceğini gösterir:
// 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(); | |
} |