الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

إنشاء سيناريوهات إنشاء قواعد البيانات و الجداول بطريقة برمجية.

بدأه محمد رضى في 31 أغسطس 2009 · 3 رد · 6,200 مشاهدة · في قسم الدروس والمواضيع المتميزة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم و رحمة الله تعالى و بركاته,,,

كما رأينا في موضوع كيفية تحديد صلاحيات مستخدمي SQL Server و البرامج المتصلة به. يتمتع برنامج SQL Server Management Studio بقدرته على إنشاء سيناريوهات T-SQL لجميع العمليات التي يمكن أن يقوم بها, و من بين هذه العمليات, إنشاء قواعد البيانات و جداولها. هذه القدرة ليست حكرا على البرنامج المذكور فقط بل نحن كذلك يمكننا فعل ذلك من على برامجنا الخاصة. كل ما نحتاج إليه هو ربط المشروع مع المكتبات التي تمكن SQL Server Management Studio من القدرة على إنشاء سيناريوهات جاهزة لإنشاء قواعد البيانات و عناصرها.

post-207152-1251722648_thumb.jpg

لنبدأ بربط مشروعنا بمكتبات 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.

في الملف المرفق تجدون مشروعا صغيرا يبين ما تعلمناه في هذا الموضوع.

تحياتي...

SQLScript.rar

تم تعديل هذه المشاركة بواسطة محمد رضى في 31 أغسطس 2009 في 15:55

#2

يمكن الطلب من الدالة Table.Script() انشاء سيناريو كامل للجدول مع الخيارات و التعريفات الإضافية و ذلك بتحديد الخيار ScriptingOptions.DriAll = True

			Dim so As New ScriptingOptions()
			so.DriAll = True
			Dim db As Database = srvr.Databases(DatabasesListBox.Items(DatabasesListBox.SelectedIndex).ToString())
			db.Tables(TablesListBox.Items(TablesListBox.SelectedIndex).ToString()).Script(so)

تحياتي...

تم تعديل هذه المشاركة بواسطة محمد رضى في 31 أغسطس 2009 في 16:34

#3

السلام عليكــم ورحمـة الله وبركاتــه ،،

اقتباس
يتمتع برنامج SQL Server Management Studio بقدرته على إنشاء سيناريوهات T-SQL

عجبتني هذه الجملة و نحن ايضا نتمتع بدروسك القيمة المفيدة.

شكرا جزيلا لك ;)

<EMBED src=http://www.abdelghafar.com/images/banners/bm2.swf width=486 height=60 type=application/x-shockwave-flash EMBED < menu="false" loop="true" quality="high">

#4

شكرااااااااااااا الله يعطيك العافيه وسلامه

مواضيع مشابهة