Membuat serial dan Bekerja dengan Dokumen dalam Database

Salah satu tugas yang mungkin perlu Anda selesaikan saat bekerja dengan dokumen adalah menyimpan dan mengambil objek Document ke dan dari database. Misalnya, hal ini diperlukan jika Anda menerapkan sistem pengelolaan konten jenis apa pun. Semua dokumen versi sebelumnya harus disimpan dalam sistem database. Kemampuan untuk menyimpan dokumen dalam database juga sangat berguna ketika aplikasi Anda menyediakan layanan berbasis web.

Aspose.Words menyediakan kemampuan untuk mengubah dokumen menjadi array byte untuk pekerjaan selanjutnya dengan dokumen ini dalam database.

Ubah Dokumen menjadi Byte Array

Untuk menyimpan dokumen dalam database atau untuk menyiapkan dokumen untuk transmisi melalui web, seringkali dokumen perlu dibuat bersambung untuk mendapatkan array byte.

Untuk membuat serial objek Document di Aspose.Words:

  1. Simpan ke MemoryStream menggunakan metode Save yang membebani kelas Document.
  2. Panggil metode ToArray, yang mengembalikan array byte yang mewakili dokumen dalam bentuk byte.

Langkah-langkah di atas kemudian dapat dibalik untuk memuat byte kembali ke objek Document.

Contoh di bawah ini menunjukkan cara membuat serialisasi objek Document untuk mendapatkan array byte, dan kemudian cara membatalkan serialisasi array byte untuk mendapatkan objek Document lagi:

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

Anda dapat mengunduh file template contoh ini dari Aspose.Words GitHub.

Simpan, Baca dan Hapus Dokumen dalam Database

Bagian ini memperlihatkan cara menyimpan dokumen dalam database dan kemudian memuatnya kembali ke objek Document untuk dikerjakan. Untuk mempermudah, nama file adalah kunci yang digunakan untuk menyimpan dan mengambil dokumen dari database. Basis data berisi dua kolom. Kolom pertama “Nama File” disimpan sebagai String dan digunakan untuk mengidentifikasi dokumen. Kolom kedua “FileContent” disimpan sebagai objek BLOB yang menyimpan objek dokumen dalam bentuk byte.

Contoh kode berikut menunjukkan cara mengatur koneksi ke database dan menjalankan perintah:

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

Contoh kode berikut menunjukkan cara menyimpan dokumen ke database, lalu membaca kembali dokumen yang sama, dan terakhir menghapus record yang berisi dokumen tersebut dari database:

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

Simpan Dokumen ke Database

Untuk menyimpan dokumen dalam database, konversikan dokumen ini ke array byte, seperti yang dijelaskan di awal artikel ini. Kemudian, simpan array byte ini ke dalam kolom database.

Contoh kode berikut menunjukkan cara menyimpan dokumen ke database yang ditentukan:

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

Tentukan commandString, yang merupakan ekspresi SQL yang melakukan semua pekerjaan:

  • Untuk menyimpan dokumen ke dalam database, perintah “INSERT INTO” digunakan dan tabel ditentukan bersama dengan nilai dari dua kolom rekaman – Nama File dan Konten File. Untuk menghindari parameter tambahan, nama file diambil dari objek Document itu sendiri. Nilai bidang FileContent diberikan byte dari aliran memori, yang berisi representasi biner dari dokumen yang disimpan.
  • Baris kode yang tersisa menjalankan perintah yang menyimpan dokumen Aspose.Words dalam database.

Ambil Dokumen dari Database

Untuk mengambil dokumen dari database, pilih rekaman yang berisi data dokumen sebagai array byte. Kemudian muat array byte dari catatan ke MemoryStream dan buat objek Document yang akan memuat dokumen dari MemoryStream.

Contoh kode berikut menunjukkan cara mengambil dan mengembalikan dokumen dari database tertentu menggunakan nama file sebagai kunci untuk mengambil dokumen ini:

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

Hapus Dokumen dari Database

Untuk menghapus dokumen dari database, gunakan perintah SQL yang sesuai tanpa manipulasi apa pun pada objek Document.

Contoh kode berikut menunjukkan cara menghapus dokumen dari database, menggunakan nama file untuk mengambil catatan:

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