معرفة نسخ SQL Server التي تم تنصيبها

This article is available in English too, check it out here.

نظرة خاطفة

سوف نقوم في هذا الدرس بإذن الله تعالى شرح كيفية معرفة نسخ Instances من SQL Server التي تم تنصيبها على هذا الجهاز أو حتى على جهاز آخر على الشبكة. سوف نقوم أولا بشرح الأدوات التي سنحتاج إليها في بيئة الدوت نت ثم سوف نقوم بشرح كيفية تنفيذ الفكرة.

مقدمة

قدمت لنا النسخة 2.0 من الـ .NET Framework إمكانية لمعرفة نسخ الـ SQL Server التي تم تنصيبها على الجهاز أو حتى على جهاز آخر على الشبكة. يمكنك تطبيق هذا عن طريق الكلاس System.Sql.SqlDataSourceEnumerator الموجودة في المكتبة System.Data.dll.

تعتبر هذه الكلاس كلاس وحيدة Singleton أي أنه لا يمكنك إنشاء نسخة منها ولكن يمكنك الحصول على نسخة منها عن طريق الخاصية Instance الموجودة في هذه الكلاس. بمعنى آخر أنه هناك نسخة واحدة التي يمكنك التعامل معها وهي يمكنك الحصول عليها عن طريق SqlDataSourceEnumerator.Instance ولا يمكنك إنشاء نسخ منها عن طريق المعامل New.

بعد حصولك على النسخة الوحيدة للكلاس SqlDataSourceEnumerator عن طريق الخاصية الثابتة Instance يمكنك الحصول على بيانات نسخ SQL Server التي تم تنصيبها عن طريق الدالة GetDataSources().

تقوم هذه الدالة بإرجاع عنصر جدول من نوع System.Data.DataTable. يحتوي هذا الجدول على صفوف تمثل النسخ المنصبة. كما يحتوي على أربعة أعمدة تمثل بيانات هذه النسخ:

  • ServerName:
    اسم السيرفر وهو اسم الجهاز المنصب عليه هذه النسخة.
  • InstanceName:
    وهو اسم النسخة على سبيل المثال SQLEXPRESS أو MSSQLSERVER.
  • IsClustered:
    هل هذه النسخة Clustered أم لا. قم بزيارة MSDN لمعرفة المزيد من المعلومات عن SQL Server Clustered Instances.
  • Version:
    إصدار هذه النسخة لـ SQL Server. SQL Server 2005 على سبيل المثال له الإصدار 9.x.x.x.

التطبيق

الكود التالي هو كود Console Application يقوم باستعراض نسخ SQL Server المنصبة:

لا تنسى إضافة جملة using في C# أو Imports في VB.NET للـ Namespaces System.Data و System.Data.Sql. وأيضا لا تنسى إضافة المكتبة System.Data.dll إلى References الخاصة بالمشروع.

// C# Code
static void Main()
{
    DataTable table = SqlDataSourceEnumerator.Instance.GetDataSources();
    DisplayTable(table);
}
private static void DisplayTable(DataTable table)
{
    foreach (DataRow row in table.Rows)
    {
        foreach (DataColumn col in table.Columns)
            Console.WriteLine("{0} = {1}", col.ColumnName, row[col]);
        Console.WriteLine(new string('-', 30));
    }
}
' VB.NET Code
Sub Main()
    Dim table As DataTable = SqlDataSourceEnumerator.Instance.GetDataSources()
    DisplayTable(table)
End Sub
Sub DisplayTable(ByVal table As DataTable)
    For Each row As DataRow In table.Rows
        For Each col As DataColumn In table.Columns
            Console.WriteLine("{0} = {1}", col.ColumnName, row(col))
            Console.WriteLine(New String(" "c, 30))
        Next
    Next
End Sub

إذا كان هناك Firewall منصب على جهازك ربما تظهر لك رسالة تطلب منك منح الكود الصلاحيات المناسبة.

لاحظ أن الدالة GetDataSources() تطلب أن يكون الكود الخاص بك حاصل على صلاحيات FullTrust. في الغالب سوف يكون الكود الخاص بك حاصل على هذه الصلاحيات.

ربما لن تظهر أسماء جميع النسخ وربما أيضا لن تظهر اسم أي نسخة وربما أيضا أن تختلف النسخ التي تظهر لك في كل مرة نداء على الدالة GetDataSources() وخاصة إذا كانت نسخ على أجهزة أخرى على الشبكة وذلك بسبب طبيعة عمل هذه الدالة.

خاتمة

تعلمنا في هذا الدرس كيفية الحصول على معلومات حول النسخ المنصبة من SQL Server. يمكنك استخدام هذه الطريقة في حالة أنك تريد أن يقوم المستخدم بتحديد مكان قاعدة البيانات التي يريد استخدامها وبهذا توفر طريقة أبسط للمستخدم أثناء تعامله مع برنامجك.

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

اخترنا لك:

أحدث المواضيع:

هل أعجبتك؟ شارك بها...
  • أنا لم أستخدم C# لكن قرأت أنها مشابهة لدرجة كبيرة للدوت نت
    هل هي فعلا كذلك

  • أنا لم أستخدم C# لكن قرأت أنها مشابهة لدرجة كبيرة للدوت نت
    هل هي فعلا كذلك

  • السلام عليكم

    أخي
    اللغة C# هي أحد اللغات التي تستهدف بيئة الدوت نت كبيئة عمل لها أي أنها تعتمد على مكتبات الدوت نت بجانب طبعا وقت تشغيل Run-time الخاص بالدوت نت والخدمات الخاصة بها.
    أما هناك لغات التي يمكنك أن تستهدف بها بيئة الدوت نت أو غيرها.
    فعلى سبيل المثال يمكنك استخدام VB6 لعمل برامج لا تستهدف بيئة الدوت نت. في حين أن النسخة الأحدث من VB6 وهي VB.NET تستهدف الدوت نت.
    وكذلك الفرق بين C++ و MC++ أو كما صممتها مايكروسوفت C++/CLI.

  • السلام عليكم

    أخي
    اللغة C# هي أحد اللغات التي تستهدف بيئة الدوت نت كبيئة عمل لها أي أنها تعتمد على مكتبات الدوت نت بجانب طبعا وقت تشغيل Run-time الخاص بالدوت نت والخدمات الخاصة بها.
    أما هناك لغات التي يمكنك أن تستهدف بها بيئة الدوت نت أو غيرها.
    فعلى سبيل المثال يمكنك استخدام VB6 لعمل برامج لا تستهدف بيئة الدوت نت. في حين أن النسخة الأحدث من VB6 وهي VB.NET تستهدف الدوت نت.
    وكذلك الفرق بين C++ و MC++ أو كما صممتها مايكروسوفت C++/CLI.

  • احمد الحديثي / العراق

    بسم الله الرحمن الرحيم
    اشكرك يا اخي فلقد اتعبني البحث في الانترنت على هذه الاجابة اشكرك على هذا المجهود

  • احمد الحديثي / العراق

    بسم الله الرحمن الرحيم
    اشكرك يا اخي فلقد اتعبني البحث في الانترنت على هذه الاجابة اشكرك على هذا المجهود

  • Pingback: Enumerating SQL Server Instances | Just Like a Magic()

  • H wasef

    بشكرك علي المجهود..
    بس ما ظهرتش عندي السيرفرات رغم اني مشغل
    SQL server express2005

    • بمتابعة مراجعات هذه الدالة في MSDN ظهر أنه للأسف بناءا على إعدادات الشبكة والسيكويل سيرفر فأحيانا لا تظهر السيرفرات.

      شكرا على المشاركة.