سؤال

ما هي الطرق الجيدة لتحقيق هذا اللسأ DB دون ترميز اثنين من الدال؟ لقد سمعت أن كتلة تطبيق الوصول إلى البيانات مناسبة لهذا الغرض.

هل كانت مفيدة؟

المحلول

يمكنك أيضًا النظر إلى العديد من مكتبات ORM مثل Nhibernate. عندما تستهدف قواعد بيانات متعددة ، من الأفضل البحث عن أداة يمكنها إنشاء قاعدة البيانات الخاصة بك من ملفات التكوين أو من التعليمات البرمجية. سيمنعك ذلك من الاضطرار إلى إنشاء قواعد بيانات متطابقة في MySQL و MSSQL.

نصائح أخرى

يتمثل أحد الخيارات في الترميز باستخدام فئات IDBConnection ، و IDBCommand ، إلخ. لا تزال بحاجة إلى إنشاء مثيل لفئة الاتصال لقاعدة البيانات المحددة التي تستخدمها ، ولكن يمكنك فقط استخدام الواجهات العامة.

http://social.msdn.microsoft.com/forums/en-us/csharplanguage/thread/1175d7ea-f5b4-442f-9155-08bf8b2ba06c/ و http://www.15seconds.com/issue/040127.htm لديك بعض رمز.

استخدم مكتبة التجريد ADODB لـ MySQL. تعد مكالمات مكتبة MySQL الأصلية قبيحة وبدائية ، لذلك ربما تريد شيئًا أعلى مستوى في أي حال.

حسنًا ، كما أشار الآخرون ، حاول تجريد نفسك بعيدًا عن الفصول الفعلية المعنية. يمكن أن يتضمن ذلك إما استخدام الواجهات ، كما يشير AHD54 ، أو شيء مشابه.

هذا سوف يحصل عليك فقط نصف الطريق رغم ذلك.

سيكون SQL الذي تحتاجه إلى تنفيذ الاختلافات أيضًا ، أشياء مثل ما يلي:

  • بناء جملة المعلمة
  • المعلمات الموضعية مقابل المعلمات المسماة
  • أسماء الوظائف
  • بعض الاختلافات في بناء الجملة ، مثل كيفية تحديد فقط أعطني الصفوف الأولى

إذا كنت بحاجة إلى تغطية كل هذه الأشياء ، ولا يمكنك أو لا تستخدم ORM (نادراً ما تحصل على 100 ٪ هناك) ، فستكون إحدى الطرق هي إنشاء فصول خاصة بك والتي لا تتجاهل فقط الفصول الفعلية المعنية ، ولكن أيضًا يفعل نوعًا من إعادة كتابة SQL للتعامل مع اختلافات الكود.

لقد ذهبت إلى مسار إعادة الكتابة ، لذلك إذا كنت بحاجة إلى مؤشرات على ذلك ، أضف تعليقًا على هذه الإجابة مع الأسئلة وسأقوم بتحديث الإجابة وفقًا لذلك.

استخدم أداة مخطط ERD ، بناء تصميم منطقي بحت ، ثم قم بإنشاء DDL لكل خيار من خياراتك.

يمكنك التحقق من DBDesigner ...

http://www.fabforce.net/downloads.php

ستساعدك ORM Frameworks على تحقيق بنية تحتية لـ RDBMS-Agnostic ، ولكن لا يزال يتعين عليك الحفاظ على Dal's إذا كنت تعمل مع إجراءات UDF والإجراءات المخزنة. نتيجة لذلك ، ربما لن تستخدم المشغلات ، T-SQL ، تحديث المشاهدات ورمز C# المستضاف CLR. يمكنك فقط تعيين الكيانات والأشياء.

سوف ADO.NET على ما يرام في معظم المشاريع. إذا كنت بحاجة إلى التبديل بين MSSQL أو MySQL ، فيمكنك تحقيق الوصول إلى موفر واضحة للغاية مثل هذا:

    private static DbProviderFactory _provider = DbProviderFactories.GetFactory(WebConfigurationManager.ConnectionStrings["database"].ProviderName);
    private static string _connectionString = WebConfigurationManager.ConnectionStrings["database"].ConnectionString;


    public static DbParameter CreateParameter(string name, object value)
    {
        DbParameter parameter = _provider.CreateParameter();
        parameter.ParameterName = name;
        parameter.Value = value;
        return parameter;
    }

    public static DataTable SelectAsTable(string query, DbParameter[] parameters)
    {
        using (DbConnection connection = _provider.CreateConnection())
        {
            connection.ConnectionString = _connectionString;
            using (DbDataAdapter adapter = _provider.CreateDataAdapter())
            {
                adapter.SelectCommand = connection.CreateCommand();
                adapter.SelectCommand.Parameters.AddRange(parameters);
                adapter.SelectCommand.CommandText = query;

                DataTable table = new DataTable();
                adapter.Fill(table);
                connection.Close();
                return table;
            }
        }
    }

أفضل طريقة للقيام بذلك (وفي الغالب أي طبقة الوصول إلى قاعدة البيانات في الواقع بشكل عام) هي استخدام أداة O/RM. أنا أفضل ActivereCord وهو غلاف حول nhibernate ...

فيما يلي بعض رمز مصدر عينة لشيء يستخدم AR ؛ رمز إلى كائن المشغل في مكدسة

الشبكة نموذج مزود تم تصميمه خصيصًا لمعالجة هذه المشكلة. من خلال توفير فئة "مزود" يتولى جميع تفاعل DB الخاص بك وينحدر من فئة قاعدة مصممة جيدًا ، يمكنك تبديل مقدمي الخدمات الخلفية (لـ SQL أو MySQL (Blech) أو XML أو أي شيء آخر) بأقل جهد.

أيضًا ، في تجربتي ، لا يمكن أن تتنافس رمز ORM الذي كتبه مطور مختص ، وغالبًا ما يخلق المزيد من مشاكل الصيانة التي يحلها. OrMs هي طبقة تجريدية أخرى تساهم في رمز أبطأ وأكثر كثافة الموارد ضرورية فقط لأولئك الذين لا يعرفون خصوصيات وعموميات SQL.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top