بســـم الله الرحمن الرحيم
السلام عليكم و رحمة الله و بركاته
نستكمل ما تبقى من مشروعنا باذن الله.
اليوم نبحث في موضوع الاستفادة من السكربتات التي يقدمها SqlServer .
السكربت:هو ملف نصي يحتوي مجموعة من جمل Sql المعيارية يفصل بينها بالكلمة GO في غالب الاحيان لتنفيذ الجمل واحدة تلو الاخرى.
يستخدم السكربت لامور كثيرة في الغالب لانشاء وحذف الكائنات (قواعد-جداول-استعلامات-اجراءات-مفاتيح...).
كما وتستخدم في عمليات معالجة البيانات (الاضافة-التعديل-الحذف-كذلك البحث..) باختصار كل ما يخطر ببالك طالما انها جمل Sql
تدعم كل قواعد البيانات العمل مع السكربتات طالما انها مكتوبة باللغة المعيارية.
ساحاول اليوم إن شاء الله شرح طريقة التعامل مع السكربتات (Script) من خلال VB.Net .
العمل مع السكربتات من خلال VB.Net
سيكون لدينا مثال شامل يمكننا من فتح ملفات السكربت و عرضها في مربع نص و كذلك تخزين اي سكربت لدينا الى ملف خارجي.
كذلك ستكون لدينا القدرة على عرض السكربت الخاص بالعنصر المحدد (قاعدة-جدول-استعلام-اجراء) كون هذه العناصر قد عرضناها
من قبل في قوائم.
اخيرا سنكون قادرين على تنفيذ السكربت .
سنحتاج الى مجموعة من الادوات لتطبيق المثال , فضلت تجميعها في عنصر GroupBox و كذلك تجميع الازرار في عنصر ToolStrip
لاضفاء نوع من الترتيب و الجمالية , الصورة التالية توضح المطلوب.
الادوات المطلوبة:
الان نعالج الحدث ToolStripLoadScript .
الفكرة هي فتح ملف نصي و عرضه في مربع النص ,للاسف هناك مشكلة بسيطة متعلقة بكلمة GO و كلمة USE الموجودتان ضمن ملف السكربت
اذ ان تنفيذ السكربت عن طريق SqlSmo يجب ان يتم دفعة واحدة و ليس جملة جملة كما هو الحال مع SqlServer لذا وجب حذف
كلمة GO على امتداد الملف و كذلك كلمة Use في حال وجودها.
انا لن اشرح طريقة التعامل مع الملفات و المجلدات و فتحها المفروض انك ملم بذلك.
الكود التالي يوضح عملية فتح ملف سكربت و ملف نصي ضمن الامتداد الذي تحدده , و كذلك حذف كلمة GO و كلمة Use على متداد النص.
و عرضه في مربع النص
الان اصبح لدينا نص السكربت معروض في مربع النص TxtTst .
بعد ذلك سنعالج الحدث ToolStripSaveScript الخاص بتخزين النص الى ملف خارجي من النوع Sql او Txt او اي امتداد تفضله.
ان كنت تعاملت مع طرق تخزين الملفات فالعملية سهلة كما في الكود التالي.
الان سنعالج الزر الخاص بعرض بنية السكربت الخاص بالعناصر المعروضة لدينا (قاعدة-جدول إستعلام-إجراء).
سبق لنا و تعرفنا الى طرق عرضها , ماذا لو احببت ان اخزن السكربتات الخاصة بها او ان انفذ سكربت انشاء جدول من قاعدة الى قاعدة
او حتى انشاء القاعدة على سيرفر اخر موجود لدي و غيرها من الامور.
لكي لا نقع في اخطاء فضلت التعامل مع كل عنصر على حده عندما أضفت عناصر RadioButtons .
فعند تحديد قاعدة بيانات مثلا سيكون لدي في ComboBox المسمى ToolStripCmbScriptLed السيرفرات المثبتة في الجهاز
لان تنفيذ سكربت انشاء القاعدة سيكون على السيرفر.
اما عند تحديد جدول فسيتم عرض قواعد البيانات في ToolStripCmbScriptLed , و هكذا مع الاستعلامات و الاجراءات.
لا عليك فقط تابع و سترى المطلوب.
نعود للقائمة الخاصة بعرض قواعد البيانات (ListBox2) و نضيف لها السطر التالي .
و هو للاشارة على اننا نتعامل مع قاعدة بيانات .
و كذلك الحال مع الجداول و الاستعلامات و الاجراءات , لذك وجب اضافة هذا الكود لكل قائمة.
قائمة الجداول نضيف الكود التالي.
قائمة الاستعلامات
قائمة الاجراءات
بعد ذلك ناتي الى حدث ToolStripShowScript .
اولا بعض الرسائل للحرص و التاكد ان هناك سيرفرات و قواعد مثبتة كما يلي.
بعد ذلك مسح محتويات العناصر و تجهيزها
بعد هذا سنكون جاهزين للتعامل مع السكربت , و لكن قبل ذلك سنضبط بعض الخيارات للسكربت بعد انشاء كائن ScriptingOptions و بعد ذلك اسناده للسكربت
كما يلي.
الجيد في الامر ان السكربت الخاص بكل كائن هو عبارة عن ملف نصي لذا علينا التعامل معه وفق ذلك.
سنعرف Stringcollection يخزن معلومات السكربت و من ثم نمر على كل نص داخله و نعرضه في TxtTst.
الان اصبحت الامور جاهزة الان سنعالج الكائن المحدد كما يلي:
في حال قاعدة البيانات
في حال جدول
في حال إستعلام
في حال إجراء مخزن
الان اصبحنا قادرين على عرض اي سكربت لاي كائن نحدده الكود الكامل لهذا الزر كما يلي:
و اخيرا بقي تنفيذ السكربت المعروض لدينا .
ملاحظة هامة:السكربتات الخاصة بالاستعلامات و الاجراءات هي كما نعلم ترتكز على كائن موجود (الجدول) لذلك عند تنفيذ
سكربت لاجراء او استعلام تاكد من الجدول الذي يرتكز عليه هذا الكائن.
ان تنفيذ السكربت سهل للغاية فهو كتنفيذ جمل Sql في كائن ADO.Net .
كما هو معلوم لدينا اننا نستخدم كائنات Command لتنفيذ جملنا اثناء التعامل مع قواعد البيانات و تحديدا باستدعاء الطريقة
التابعة لهذا العنصر (ExecuteNonQuery).
سنفرق بين امرين هنا إنشاء قاعدة البيانات و إنشاء باقي العناصر المشمولة في قاعدة البيانات كما يلي:
إنشاء قاعدة البيانات
كوني لا املك الا سيرفر واحد مثبت على الجهاز آثرت ان لا انشئ نفس القاعدة على السيرفر , يمكنك استبدال الكود ليقبل بانشاء
القاعدة على نفس السيرفر , مع انني عندما حددت خيارات السكربت طلبت ان يفحص اذا كان الكائن موجود ام لا , تحديدا هذا السطر
على اي حال نكمل مع باقي عناصر القاعدة (جدول-استعلام-اجراء)
تم شمل هذه العناصر بكود واحد لان القاعدة المحددة واحدة.
الكود كما يلي:
كود تنفيذ السكربت كامل
بقي كود طول النص و عدد الاسطر كما يلي:
اصبح لدينا كل ما نحتاجه و اصبح المثال كاملا.
تم بحمد الله و فضله.
السلام عليكم و رحمة الله و بركاته
نستكمل ما تبقى من مشروعنا باذن الله.
اليوم نبحث في موضوع الاستفادة من السكربتات التي يقدمها SqlServer .
السكربت:هو ملف نصي يحتوي مجموعة من جمل Sql المعيارية يفصل بينها بالكلمة GO في غالب الاحيان لتنفيذ الجمل واحدة تلو الاخرى.
يستخدم السكربت لامور كثيرة في الغالب لانشاء وحذف الكائنات (قواعد-جداول-استعلامات-اجراءات-مفاتيح...).
كما وتستخدم في عمليات معالجة البيانات (الاضافة-التعديل-الحذف-كذلك البحث..) باختصار كل ما يخطر ببالك طالما انها جمل Sql
تدعم كل قواعد البيانات العمل مع السكربتات طالما انها مكتوبة باللغة المعيارية.
ساحاول اليوم إن شاء الله شرح طريقة التعامل مع السكربتات (Script) من خلال VB.Net .
العمل مع السكربتات من خلال VB.Net
سيكون لدينا مثال شامل يمكننا من فتح ملفات السكربت و عرضها في مربع نص و كذلك تخزين اي سكربت لدينا الى ملف خارجي.
كذلك ستكون لدينا القدرة على عرض السكربت الخاص بالعنصر المحدد (قاعدة-جدول-استعلام-اجراء) كون هذه العناصر قد عرضناها
من قبل في قوائم.
اخيرا سنكون قادرين على تنفيذ السكربت .
سنحتاج الى مجموعة من الادوات لتطبيق المثال , فضلت تجميعها في عنصر GroupBox و كذلك تجميع الازرار في عنصر ToolStrip
لاضفاء نوع من الترتيب و الجمالية , الصورة التالية توضح المطلوب.
الادوات المطلوبة:
- ToolStrip نسميها ToolStrip1 نستخدمها لتجميع الازرار.
- Button نسميه ToolStripLoadScript نستخدمه لفتح ملفات السكربت و تحميلها في مربع النص.
- Button نسميه ToolStripSaveScript نستخدمه لتخزين نص السكربت الى ملف خارجي.
- Button نسميه ToolStripShowScript نستخدمه لعرض السكربت الخاص بالكائن المحدد.
- Button نسميه ToolStripBatchScript نستخدمه لتنفيذ السكربت المعروض لدينا.
- ComboBox نسميه ToolStripCmbScriptLed نستخدمه لعرض محتويات الكائن المحدد (سيتم شرحه).
- RadioButton نسميه RadioButton1 (في حال كان العنصر المحدد قاعدة سيتم تفعيله).
- RadioButton نسنيه RadioButton2 (في حال كان العنصر المحدد جدول سيتم تفعيله).
- RadioButton نسنيه RadioButton3 (في حال كان العنصر المحدد إستعلام سيتم تفعيله).
- RadioButton نسنيه RadioButton4 (في حال كان العنصر المحدد إجراء سيتم تفعيله).
- TextBox نسميه txtScriptInfo نستخدمه لاعطاء وصف للعنصر المحدد.
- TextBox نسميه TxtTst نستخدمه لعرض السكربت (مع تفعيل خاصية MultiLine).
- TextBox نسميه TxtLength نسيتخدمه لعرض طول نص السكربت.
- TextBox نسميه TxtLines نستخدمه لعرض عدد الاسطر.
- TextBox نسميه TxtPath نستخدمه لعرض المسار.
الان نعالج الحدث ToolStripLoadScript .
الفكرة هي فتح ملف نصي و عرضه في مربع النص ,للاسف هناك مشكلة بسيطة متعلقة بكلمة GO و كلمة USE الموجودتان ضمن ملف السكربت
اذ ان تنفيذ السكربت عن طريق SqlSmo يجب ان يتم دفعة واحدة و ليس جملة جملة كما هو الحال مع SqlServer لذا وجب حذف
كلمة GO على امتداد الملف و كذلك كلمة Use في حال وجودها.
انا لن اشرح طريقة التعامل مع الملفات و المجلدات و فتحها المفروض انك ملم بذلك.
الكود التالي يوضح عملية فتح ملف سكربت و ملف نصي ضمن الامتداد الذي تحدده , و كذلك حذف كلمة GO و كلمة Use على متداد النص.
و عرضه في مربع النص
كود :
Private Sub ToolStripLoadScript_Click(sender As System.Object, e As System.EventArgs) Handles ToolStripLoadScript.Click
'فتح ملف سكربت خارجي
Dim OpenFd As New OpenFileDialog
Dim sql1 As String = Nothing
Dim mystrem As StreamReader = Nothing
Dim f1 As FileInfo
'-------------------------------------------------------------
OpenFd.Filter = "Txt Files (*.txt)|*.txt| Sql Files (*.sql)|*.sql"
OpenFd.FilterIndex = 2
OpenFd.RestoreDirectory = True
'-------------------------------------------------------------
If OpenFd.ShowDialog = Windows.Forms.DialogResult.OK Then
'------------------
f1 = New FileInfo(OpenFd.FileName)
'-----------------
Try
'-----------------------------------------
TxtPath.Text = OpenFd.FileName
mystrem = New StreamReader(f1.OpenRead)
'-----------------------------------------
While mystrem.Peek <> -1
sql1 = (mystrem.ReadToEnd)
sql1 += vbLf & "GO"
End While
'------------------------------
TxtTst.Clear()
'------------------------------
For Each line As String In sql1.Split(New String(1) {vbLf, vbCr}, StringSplitOptions.RemoveEmptyEntries)
'------------------------------------------------------------
If Not (line.ToUpperInvariant.Trim) = "GO" Then
If Not (line.Contains("USE")) Then
TxtTst.AppendText(line + System.Environment.NewLine)
End If
End If
'------------------------------------------------------------
Next
'--------------------------------------------------------------------------------------------------------------
Catch ex As Exception
End Try
End If
End Sub
الان اصبح لدينا نص السكربت معروض في مربع النص TxtTst .
بعد ذلك سنعالج الحدث ToolStripSaveScript الخاص بتخزين النص الى ملف خارجي من النوع Sql او Txt او اي امتداد تفضله.
ان كنت تعاملت مع طرق تخزين الملفات فالعملية سهلة كما في الكود التالي.
كود :
Private Sub ToolStripSaveScript_Click(sender As System.Object, e As System.EventArgs) Handles ToolStripSaveScript.Click
'حفظ السكربت الى ملف خارجي
If TxtTst.TextLength > 0 Then
Dim SaveDg As New SaveFileDialog()
SaveDg.Filter = "Txt Files (*.txt)| *.txt| Sql Files (*.sql)|*.sql"
SaveDg.FilterIndex = 2
SaveDg.RestoreDirectory = True
If SaveDg.ShowDialog() = DialogResult.OK Then
IO.File.WriteAllText(SaveDg.FileName, TxtTst.Text)
End If
End If
End Sub
الان سنعالج الزر الخاص بعرض بنية السكربت الخاص بالعناصر المعروضة لدينا (قاعدة-جدول إستعلام-إجراء).
سبق لنا و تعرفنا الى طرق عرضها , ماذا لو احببت ان اخزن السكربتات الخاصة بها او ان انفذ سكربت انشاء جدول من قاعدة الى قاعدة
او حتى انشاء القاعدة على سيرفر اخر موجود لدي و غيرها من الامور.
لكي لا نقع في اخطاء فضلت التعامل مع كل عنصر على حده عندما أضفت عناصر RadioButtons .
فعند تحديد قاعدة بيانات مثلا سيكون لدي في ComboBox المسمى ToolStripCmbScriptLed السيرفرات المثبتة في الجهاز
لان تنفيذ سكربت انشاء القاعدة سيكون على السيرفر.
اما عند تحديد جدول فسيتم عرض قواعد البيانات في ToolStripCmbScriptLed , و هكذا مع الاستعلامات و الاجراءات.
لا عليك فقط تابع و سترى المطلوب.
نعود للقائمة الخاصة بعرض قواعد البيانات (ListBox2) و نضيف لها السطر التالي .
كود :
RadioButton1.Checked = True
و هو للاشارة على اننا نتعامل مع قاعدة بيانات .
و كذلك الحال مع الجداول و الاستعلامات و الاجراءات , لذك وجب اضافة هذا الكود لكل قائمة.
قائمة الجداول نضيف الكود التالي.
كود :
RadioButton2.Checked = True
قائمة الاستعلامات
كود :
RadioButton3.Checked = True
قائمة الاجراءات
كود :
RadioButton4.Checked = True
بعد ذلك ناتي الى حدث ToolStripShowScript .
اولا بعض الرسائل للحرص و التاكد ان هناك سيرفرات و قواعد مثبتة كما يلي.
كود :
If LstSrv.Items.Count <= 0 Then
MessageBox.Show("لا يوجد سيرفرات مثبتة على الجهاز", "فحص السيرفرات", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1, MessageBoxOptions.RightAlign)
Exit Sub
End If
If LstDbs.Items.Count <= 0 Then
MessageBox.Show("لا يوجد قواعد حاول الاتصال بالسيرفر", "فحص القواعد", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1, MessageBoxOptions.RightAlign)
Exit Sub
ElseIf LstDbs.SelectedIndex = -1 Then
MessageBox.Show("حدد قاعدة البيانات اولا", "فحص القواعد", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1, MessageBoxOptions.RightAlign)
Exit Sub
End If
بعد ذلك مسح محتويات العناصر و تجهيزها
كود :
TxtTst.Clear()
txtScriptInfo.Clear()
ToolStripCmbScriptLed.Items.Clear()
بعد هذا سنكون جاهزين للتعامل مع السكربت , و لكن قبل ذلك سنضبط بعض الخيارات للسكربت بعد انشاء كائن ScriptingOptions و بعد ذلك اسناده للسكربت
كما يلي.
كود :
Dim options As ScriptingOptions = New ScriptingOptions()
options.IncludeIfNotExists = True
options.ClusteredIndexes = True
options.Default = True
options.DriAll = True
options.Indexes = True
options.IncludeHeaders = False
الجيد في الامر ان السكربت الخاص بكل كائن هو عبارة عن ملف نصي لذا علينا التعامل معه وفق ذلك.
سنعرف Stringcollection يخزن معلومات السكربت و من ثم نمر على كل نص داخله و نعرضه في TxtTst.
كود :
Dim Dbs As Database = srv.Databases(LstDbs.SelectedItem.ToString)
Dim coll As StringCollection
Dim str As String = ""
الان اصبحت الامور جاهزة الان سنعالج الكائن المحدد كما يلي:
في حال قاعدة البيانات
كود :
'قاعدة
If RadioButton1.Checked = True Then
If LstDbs.Items.Count > 0 And LstDbs.SelectedIndex <> -1 Then
coll = Dbs.Script(options)
For Each str In coll
TxtTst.AppendText(str + System.Environment.NewLine)
Next
txtScriptInfo.Text = "سكربت قاعدة بيانات" + " - " + Dbs.Name
For Each ItemName As String In LstSrv.Items
ToolStripCmbScriptLed.Items.Add(ItemName)
Next
End If
End If
في حال جدول
كود :
'جدول
If RadioButton2.Checked = True Then
If LstTable.Items.Count > 0 And LstTable.SelectedIndex <> -1 Then
Dim tbl As Table = Dbs.Tables(LstTable.SelectedItem.ToString)
coll = Dbs.Tables(tbl.Name).Script(options)
For Each str In coll
TxtTst.AppendText(str + System.Environment.NewLine)
Next
txtScriptInfo.Text = "سكربت الجدول" + " - " + Dbs.Name + "/" + tbl.Name
For Each ItemName As String In LstDbs.Items
ToolStripCmbScriptLed.Items.Add(ItemName)
Next
End If
End If
في حال إستعلام
كود :
'إستعلام
If RadioButton3.Checked = True Then
If LstViews.Items.Count > 0 And LstViews.SelectedIndex <> -1 Then
Dim view1 As View = Dbs.Views(LstViews.SelectedItem.ToString)
coll = Dbs.Views(view1.Name).Script(options)
For Each str In coll
TxtTst.AppendText(str + System.Environment.NewLine)
Next
txtScriptInfo.Text = "سكربت الإستعلام" + " - " + Dbs.Name + "/" + view1.Name
For Each ItemName As String In LstDbs.Items
ToolStripCmbScriptLed.Items.Add(ItemName)
Next
End If
End If
في حال إجراء مخزن
كود :
'إجراء
If RadioButton4.Checked = True Then
If LstStoredPro.Items.Count > 0 And LstStoredPro.SelectedIndex <> -1 Then
Dim Stored1 As StoredProcedure = Dbs.StoredProcedures(LstStoredPro.SelectedItem.ToString)
coll = Dbs.StoredProcedures(Stored1.Name).Script(options)
For Each str In coll
TxtTst.AppendText(str + System.Environment.NewLine)
Next
txtScriptInfo.Text = "سكربت الإجراء" + " - " + Dbs.Name + "/" + Stored1.Name
For Each ItemName As String In LstDbs.Items
ToolStripCmbScriptLed.Items.Add(ItemName)
Next
End If
End If
الان اصبحنا قادرين على عرض اي سكربت لاي كائن نحدده الكود الكامل لهذا الزر كما يلي:
كود :
If LstSrv.Items.Count <= 0 Then
MessageBox.Show("لا يوجد سيرفرات مثبتة على الجهاز", "فحص السيرفرات", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1, MessageBoxOptions.RightAlign)
Exit Sub
End If
If LstDbs.Items.Count <= 0 Then
MessageBox.Show("لا يوجد قواعد حاول الاتصال بالسيرفر", "فحص القواعد", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1, MessageBoxOptions.RightAlign)
Exit Sub
ElseIf LstDbs.SelectedIndex = -1 Then
MessageBox.Show("حدد قاعدة البيانات اولا", "فحص القواعد", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1, MessageBoxOptions.RightAlign)
Exit Sub
End If
TxtTst.Clear()
txtScriptInfo.Clear()
ToolStripCmbScriptLed.Items.Clear()
Dim options As ScriptingOptions = New ScriptingOptions()
options.IncludeIfNotExists = True
options.ClusteredIndexes = True
options.Default = True
options.DriAll = True
options.Indexes = True
options.IncludeHeaders = False
Dim Dbs As Database = srv.Databases(LstDbs.SelectedItem.ToString)
Dim coll As StringCollection
Dim str As String = ""
'قاعدة
If RadioButton1.Checked = True Then
If LstDbs.Items.Count > 0 And LstDbs.SelectedIndex <> -1 Then
coll = Dbs.Script(options)
For Each str In coll
TxtTst.AppendText(str + System.Environment.NewLine)
Next
txtScriptInfo.Text = "سكربت قاعدة بيانات" + " - " + Dbs.Name
For Each ItemName As String In LstSrv.Items
ToolStripCmbScriptLed.Items.Add(ItemName)
Next
End If
End If
'جدول
If RadioButton2.Checked = True Then
If LstTable.Items.Count > 0 And LstTable.SelectedIndex <> -1 Then
Dim tbl As Table = Dbs.Tables(LstTable.SelectedItem.ToString)
coll = Dbs.Tables(tbl.Name).Script(options)
For Each str In coll
TxtTst.AppendText(str + System.Environment.NewLine)
Next
txtScriptInfo.Text = "سكربت الجدول" + " - " + Dbs.Name + "/" + tbl.Name
For Each ItemName As String In LstDbs.Items
ToolStripCmbScriptLed.Items.Add(ItemName)
Next
End If
End If
'إستعلام
If RadioButton3.Checked = True Then
If LstViews.Items.Count > 0 And LstViews.SelectedIndex <> -1 Then
Dim view1 As View = Dbs.Views(LstViews.SelectedItem.ToString)
coll = Dbs.Views(view1.Name).Script(options)
For Each str In coll
TxtTst.AppendText(str + System.Environment.NewLine)
Next
txtScriptInfo.Text = "سكربت الإستعلام" + " - " + Dbs.Name + "/" + view1.Name
For Each ItemName As String In LstDbs.Items
ToolStripCmbScriptLed.Items.Add(ItemName)
Next
End If
End If
'إجراء
If RadioButton4.Checked = True Then
If LstStoredPro.Items.Count > 0 And LstStoredPro.SelectedIndex <> -1 Then
Dim Stored1 As StoredProcedure = Dbs.StoredProcedures(LstStoredPro.SelectedItem.ToString)
coll = Dbs.StoredProcedures(Stored1.Name).Script(options)
For Each str In coll
TxtTst.AppendText(str + System.Environment.NewLine)
Next
txtScriptInfo.Text = "سكربت الإجراء" + " - " + Dbs.Name + "/" + Stored1.Name
For Each ItemName As String In LstDbs.Items
ToolStripCmbScriptLed.Items.Add(ItemName)
Next
End If
End If
و اخيرا بقي تنفيذ السكربت المعروض لدينا .
ملاحظة هامة:السكربتات الخاصة بالاستعلامات و الاجراءات هي كما نعلم ترتكز على كائن موجود (الجدول) لذلك عند تنفيذ
سكربت لاجراء او استعلام تاكد من الجدول الذي يرتكز عليه هذا الكائن.
ان تنفيذ السكربت سهل للغاية فهو كتنفيذ جمل Sql في كائن ADO.Net .
كما هو معلوم لدينا اننا نستخدم كائنات Command لتنفيذ جملنا اثناء التعامل مع قواعد البيانات و تحديدا باستدعاء الطريقة
التابعة لهذا العنصر (ExecuteNonQuery).
سنفرق بين امرين هنا إنشاء قاعدة البيانات و إنشاء باقي العناصر المشمولة في قاعدة البيانات كما يلي:
إنشاء قاعدة البيانات
كود :
'انشاء القاعدة على سيرفر اخر
If RadioButton1.Checked = True And ToolStripCmbScriptLed.Text <> "" Then
If ToolStripCmbScriptLed.Text.Equals(LstSrv.SelectedItem.ToString) Then
MessageBox.Show("لا يمكن انشاء قاعدة البيانات على نفس السيرفر", "تنفيذ السكربت", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1, MessageBoxOptions.RightAlign)
Exit Sub
Else
Try
srv = New Server(ToolStripCmbScriptLed.Text)
srv.ConnectionContext.ExecuteNonQuery(TxtTst.Text)
Catch ox As SmoException
MsgBox(ox.Message.ToString)
Catch ex As Exception
MsgBox(ex.Message.ToString)
End Try
End If
End If
كوني لا املك الا سيرفر واحد مثبت على الجهاز آثرت ان لا انشئ نفس القاعدة على السيرفر , يمكنك استبدال الكود ليقبل بانشاء
القاعدة على نفس السيرفر , مع انني عندما حددت خيارات السكربت طلبت ان يفحص اذا كان الكائن موجود ام لا , تحديدا هذا السطر
كود :
options.IncludeIfNotExists = True
على اي حال نكمل مع باقي عناصر القاعدة (جدول-استعلام-اجراء)
تم شمل هذه العناصر بكود واحد لان القاعدة المحددة واحدة.
الكود كما يلي:
كود :
'انشاءالجدول و الاستعلامات و الاجراءات
If RadioButton2.Checked = True Or RadioButton3.Checked = True Or RadioButton4.Checked = True Then
If ToolStripCmbScriptLed.Text <> "" Then
Try
srv = New Server(LstSrv.SelectedItem.ToString)
Dim Dbase As Database = srv.Databases(ToolStripCmbScriptLed.Text)
Dbase.ExecuteWithResults(TxtTst.Text)
Catch ox As SmoException
MsgBox(ox.Message.ToString)
Catch ex As Exception
MsgBox(ex.Message.ToString)
End Try
Else
MessageBox.Show("يرجى تحديد قاعدة البيانات اولا", "تنفيذ السكربت", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1, MessageBoxOptions.RightAlign)
ToolStripCmbScriptLed.Focus()
Exit Sub
End If
End If
كود تنفيذ السكربت كامل
كود :
Private Sub ToolStripBatchScript_Click(sender As System.Object, e As System.EventArgs) Handles ToolStripBatchScript.Click
'انشاء القاعدة على سيرفر اخر
If RadioButton1.Checked = True And ToolStripCmbScriptLed.Text <> "" Then
If ToolStripCmbScriptLed.Text.Equals(LstSrv.SelectedItem.ToString) Then
MessageBox.Show("لا يمكن انشاء قاعدة البيانات على نفس السيرفر", "تنفيذ السكربت", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1, MessageBoxOptions.RightAlign)
Exit Sub
Else
Try
srv = New Server(ToolStripCmbScriptLed.Text)
srv.ConnectionContext.ExecuteNonQuery(TxtTst.Text)
Catch ox As SmoException
MsgBox(ox.Message.ToString)
Catch ex As Exception
MsgBox(ex.Message.ToString)
End Try
End If
End If
'انشاءالجدول و الاستعلامات و الاجراءات
If RadioButton2.Checked = True Or RadioButton3.Checked = True Or RadioButton4.Checked = True Then
If ToolStripCmbScriptLed.Text <> "" Then
Try
srv = New Server(LstSrv.SelectedItem.ToString)
Dim Dbase As Database = srv.Databases(ToolStripCmbScriptLed.Text)
Dbase.ExecuteWithResults(TxtTst.Text)
Catch ox As SmoException
MsgBox(ox.Message.ToString)
Catch ex As Exception
MsgBox(ex.Message.ToString)
End Try
Else
MessageBox.Show("يرجى تحديد قاعدة البيانات اولا", "تنفيذ السكربت", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1, MessageBoxOptions.RightAlign)
ToolStripCmbScriptLed.Focus()
Exit Sub
End If
End If
End Sub
بقي كود طول النص و عدد الاسطر كما يلي:
كود :
Private Sub TxtTst_TextChanged(sender As System.Object, e As System.EventArgs) Handles TxtTst.TextChanged
If TxtTst.TextLength <= 0 Then
ToolStripBatchScript.Enabled = False
Else
ToolStripBatchScript.Enabled = True
End If
TxtLength.Text = TxtTst.TextLength.ToString
TxtLines.Text = TxtTst.Lines.Count
End Sub
اصبح لدينا كل ما نحتاجه و اصبح المثال كاملا.
تم بحمد الله و فضله.
اللهم لك الحمد كما ينبغي لجلال وجهك و عظيم سلطانك
في حل و ترحال