السلام عليكم و رحمة الله تعالى و بركاته,,,
كما رأينا في موضوع كيفية تحديد صلاحيات مستخدمي SQL Server و البرامج المتصلة به. يتمتع برنامج SQL Server Management Studio بقدرته على إنشاء سيناريوهات T-SQL لجميع العمليات التي يمكن أن يقوم بها, و من بين هذه العمليات, إنشاء قواعد البيانات و جداولها. هذه القدرة ليست حكرا على البرنامج المذكور فقط بل نحن كذلك يمكننا فعل ذلك من على برامجنا الخاصة. كل ما نحتاج إليه هو ربط المشروع مع المكتبات التي تمكن SQL Server Management Studio من القدرة على إنشاء سيناريوهات جاهزة لإنشاء قواعد البيانات و عناصرها.
لنبدأ بربط مشروعنا بمكتبات SMO و ConnectionInfo و ذلك عبر نافذة خصائص المشروع التي نفتحها عن طريق النقر مرتين على اسم المشروع من على نافذة Solution Explorer. بعد ذلك, نفتح صفحة References التي عليها ننقر على الزر Add. ثم نبحث عن المكتبات باسم Microsoft.SqlServer.SMO و Microsoft.SqlServer.ConnectionInfo و نزيدها إلى مشروعنا. بعد ذلك نفتح صفحة الكود للنموذج الرئيسي للمشروع و نزيد الكود التالي في الأعلى قبل تعريف الفئة Form1 :
Imports Microsoft.SqlServer.Management.Smo Imports Microsoft.SqlServer.Management.Common Imports System.Data.SqlClient Imports System.Collections.Specialized
الكود أعلاه سيمكننا من الوصول السهل إلى الفئات المكونة للمكتبات التي قمنا بزيادتها إضافة إلى المكتبات المرتبطة بها.
داخل تعريف النموذج الرئيسي Form1 سنحتاج إلى الكائنات التالية :
con : كائن للفئة SqlConnection نحدد من خلاله جملة الربط بـ SQL Server.
srvrCon : كائن للفئة ServerConnection التي من خلالها نربط الاتصال بـ SQL Server.
srvr : الكائن الممثل لنسخة SQL Server المشتغلة حاليا على نظام التشغيل. هذا الكائن هو الذي يمكننا من الوصول إلى كل قواعد البيانات و عناصرها و حتى خصائص و وظائف السيرفر ذاته.
' كائن ربط الاتصال Private con As SqlConnection ' كائن الاتصال بالسيرفر Private srvrCon As ServerConnection ' الكائن الممثل للسيرفر Private srvr As Server
بعد ذلك نحتاج إلى تهيئة الكائنات التي قمنا بتعريفها. سنقوم بذلك في دالة الحدث Load للنموذج الرئيسي :
' تحميل الفورم الرئيسي
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
' تحديد جملة ربط الإتصال
con = New SqlConnection("Data Source=.\SQLEXPRESS;Integrated Security=SSPI;Connect Timeout=30")
' تهيئة كائن الإتصال بالسيرفر
srvrCon = New ServerConnection(con)
' تهيئة الكائن الممثل للسيرفر
srvr = New Server(srvrCon)
' تحميل لائحة قواعد البيانات المرتبطة بالسيرفر
DatabasesListBox.Items.Clear()
For Each db As Database In srvr.Databases
DatabasesListBox.Items.Add(db.Name)
Next
End Subالكائن con نحتاج إلى تهيئته بجملة ربط الاتصال بالسيرفر نفسه و ليس إلى قاعدة بيانات. الكائن srvrCon يحتاج إلى تهيئته بالكائن con و الكائن srvr يحتاج إلى خدمات الكائن srvrCon و لذلك سنقوم بتهيئته به. الأسطر الأخيرة تقوم بتحميل لائحة قواعد البيانات الموجودة في الخاصية srvr.Databases .
بعد ملئ لائحة قواعد البيانات المرتبطة بالسيرفر الذي قمنا بربط الاتصال به. يبقى البرنامج في حالة انتظار لأمر من المستخدم. عندما يختار هذا الأخير قاعدة من قواعد البيانات يقوم الكود التالي المشترك في الحدث SelectedIndexChanged للائحة DatabasesListBox باستعلام و تحميل كل الجداول التي تحتوي عليها قاعدة البيانات التي قام المستخدم باختيارها ثم ينهي الكود عمله بتحميل سيناريو إنشاء قاعدة البيانات على مربع النص ScriptTextBox :
' حدث عند اختيار قاعدة بيانات من اللائحة Private Sub DatabasesListBox_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles DatabasesListBox.SelectedIndexChanged If DatabasesListBox.SelectedIndex >= 0 Then Me.Cursor = Cursors.WaitCursor ' تحميل الجداول إلى اللائحة TablesListBox.Items.Clear() For Each tbl As Table In srvr.Databases(DatabasesListBox.Items(DatabasesListBox.SelectedIndex).ToString()).Tables TablesListBox.Items.Add(tbl.Name) Next TablesListBox.SelectedIndex = -1 ' إنشاء سيناريو إنشاء قاعدة البيانات ScriptTextBox.Text = "" Dim strcol As StringCollection = srvr.Databases(DatabasesListBox.Items(DatabasesListBox.SelectedIndex).ToString()).Script() For Each s As String In strcol ScriptTextBox.Text = ScriptTextBox.Text + s + vbCrLf Next Cursor = Cursors.Default End If End Sub
طريقة إنشاء سيناريو T-SQL سهل للغاية. نحتاج فقط للوصول إلى الكائن الذي يمثل قاعدة البيانات ثم ننادي من خلاله على الدالة Script() التي ترجع لنا مجموعة أسطر نقوم بجمعها للحصول على سيناريو إنشاء قاعدة البيانات.
بعد تحميل أسماء الجداول من قاعدة البيانات, ينتظر البرنامج من المستخدم اختيار جدول. عند اختيار الجدول يقوم الكود التالي بالوصول إلى الكائن من مجموعة الجداول srvr.Databases("db_name").Tables ثم ينادي على الدالة Script() لإنشاء سيناريو إنشاء الجدول :
' حدث عند اختيار جدول من على اللائحة Private Sub TablesListBox_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TablesListBox.SelectedIndexChanged If TablesListBox.SelectedIndex >= 0 Then Cursor = Cursors.WaitCursor ' إنشاء سيناريو إنشاء الجدول المختار من على اللائحة ScriptTextBox.Text = "" Dim strcol As StringCollection = srvr.Databases(DatabasesListBox.Items(DatabasesListBox.SelectedIndex).ToString()).Tables(TablesListBox.Items(TablesListBox.SelectedIndex).ToString()).Script() For Each s As String In strcol ScriptTextBox.Text = ScriptTextBox.Text + s + vbCrLf Next Cursor = Cursors.Default End If End Sub
تعلمنا معا كيفية استعمال مكتبات SQL Server لإنشاء سيناريوهات T-SQL كما يفعل البرنامج Microsoft SQL Management Studio. بنفس الطريقة نستطيع إنشاء سيناريوهات لإنشاء كل عنصر مكون لقاعدة بيانات مرتبطة بالسيرفر. خلاصة القول أن المكتبات و الفئات التي تحدثنا عليها في هذا الموضوع تمكننا من القيام بكل ما يقوم به برنامج SQL Server Management Studio.
في الملف المرفق تجدون مشروعا صغيرا يبين ما تعلمناه في هذا الموضوع.
تحياتي...