إجراء تسلسل والعمل مع مستند في قاعدة بيانات
إحدى المهام التي قد تحتاج إلى إنجازها عند العمل مع المستندات هي تخزين واسترجاع كائنات Document من وإلى قاعدة البيانات. على سبيل المثال، قد يكون هذا ضروريًا إذا كنت تقوم بتنفيذ أي نوع من نظام إدارة المحتوى. يجب تخزين جميع الإصدارات السابقة من المستندات في نظام قاعدة البيانات. تعد القدرة على تخزين المستندات في قاعدة البيانات مفيدة للغاية أيضًا عندما يوفر تطبيقك خدمة قائمة على الويب.
يوفر Aspose.Words القدرة على تحويل مستند إلى مصفوفة بايت للعمل اللاحق مع هذا المستند في قاعدة البيانات.
تحويل مستند إلى صفيف بايت
لتخزين مستند في قاعدة بيانات أو لإعداد مستند لإرساله عبر الويب، غالبًا ما يكون من الضروري إجراء تسلسل للمستند للحصول على مصفوفة بايت.
لإجراء تسلسل لكائن Document في Aspose.Words:
- احفظه في MemoryStream باستخدام التحميل الزائد لأسلوب Save لفئة Document.
- استدعاء الأسلوب ToArray، الذي يقوم بإرجاع مجموعة من البايتات التي تمثل المستند في شكل بايت.
يمكن عكس الخطوات المذكورة أعلاه لتحميل البايتات مرة أخرى إلى كائن Document.
يوضح المثال أدناه كيفية إجراء تسلسل لكائن Document للحصول على مصفوفة بايت، ثم كيفية إلغاء تسلسل مصفوفة البايت للحصول على كائن Document مرة أخرى:
// 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); |
يمكنك تنزيل ملف القالب الخاص بهذا المثال من Aspose.Words GitHub.
تخزين وقراءة وحذف مستند في قاعدة بيانات
يوضح هذا القسم كيفية حفظ مستند في قاعدة بيانات ثم تحميله مرة أخرى إلى كائن Document
للعمل معه. للتبسيط، اسم الملف هو المفتاح المستخدم لتخزين المستندات وجلبها من قاعدة البيانات. تحتوي قاعدة البيانات على عمودين. يتم تخزين العمود الأول “اسم الملف” كسلسلة ويستخدم لتحديد المستندات. يتم تخزين العمود الثاني “FileContent” ككائن BLOB
الذي يخزن كائن المستند في شكل بايت.
يوضح مثال التعليمات البرمجية التالي كيفية إعداد اتصال بقاعدة بيانات وتنفيذ الأوامر:
// 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(); |
يوضح مثال التعليمات البرمجية التالي كيفية حفظ مستند في قاعدة البيانات، ثم قراءة نفس المستند مرة أخرى، وأخيرًا حذف السجل الذي يحتوي على المستند من قاعدة البيانات:
// 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(); |
حفظ مستند إلى قاعدة بيانات
لحفظ مستند في قاعدة بيانات، قم بتحويل هذا المستند إلى صفيف من البايتات، كما هو موضح في بداية هذه المقالة. ثم قم بحفظ صفيف البايت هذا في حقل قاعدة بيانات.
يوضح مثال التعليمات البرمجية التالي كيفية حفظ مستند في قاعدة البيانات المحددة:
// 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(); | |
} |
حدد CommandString، وهو تعبير SQL الذي يقوم بكل العمل:
- لحفظ مستند في قاعدة البيانات، يتم استخدام الأمر “INSERT INTO” ويتم تحديد جدول مع قيم حقلي سجل - FileName وFileContent. لتجنب المعلمات الإضافية، يتم أخذ اسم الملف من كائن Document نفسه. يتم تعيين قيمة حقل
FileContent
بالبايتات من دفق الذاكرة، الذي يحتوي على تمثيل ثنائي للمستند المخزن. - ينفذ السطر المتبقي من التعليمات البرمجية الأمر الذي يخزن مستند Aspose.Words في قاعدة البيانات.
استرداد مستند من قاعدة بيانات
لاسترداد مستند من قاعدة البيانات، حدد السجل الذي يحتوي على بيانات المستند كصفيف من البايتات. ثم قم بتحميل مصفوفة البايت من السجل إلى MemoryStream وقم بإنشاء كائن Document الذي سيقوم بتحميل المستند من MemoryStream.
يوضح مثال التعليمات البرمجية التالي كيفية استرداد مستند وإعادته من قاعدة البيانات المحددة باستخدام اسم الملف كمفتاح لجلب هذا المستند:
// 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; | |
} |
حذف مستند من قاعدة بيانات
لحذف مستند من قاعدة البيانات، استخدم أمر SQL المناسب دون أي معالجة على كائن Document.
يوضح مثال التعليمات البرمجية التالي كيفية حذف مستند من قاعدة البيانات، باستخدام اسم الملف لجلب السجل:
// 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(); | |
} |