سؤال

إنني أتطلع إلى العمل في مشروع يستخدم C#.NET (الموجود على صندوق Windows) كلغة أساسية وPostgreSQL كقاعدة بيانات خلفية (الواجهة الخلفية موجودة على صندوق Linux).لقد سمعت أن ODBC.NET يسمح بالتكامل السهل بين هذين المكونين.

هل كان لدى أي شخص خبرة في إعداد C# وPostgreSQL للعمل معًا؟إذا كان الأمر كذلك، هل لديك أي اقتراحات حول كيفية القيام بذلك، والمشكلات التي وجدتها، وما إلى ذلك؟

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

المحلول

أنا أعمل مع C# وPostgres باستخدام Npgsql2 المكون، وأنها تعمل بسرعة، أوصي لك.

يمكنك التحميل من https://github.com/npgsql/Npgsql/releases

ملحوظة: إذا كنت تريد تطبيقًا يعمل مع أي قاعدة بيانات، يمكنك استخدام DbProviderFactory الفصل واجعل استفساراتك باستخدام اتصال IDb, IDbCommand, معرف البيانات و/أو IDbTransaction واجهات.

نصائح أخرى

نبجسكل - .Net Provider for PostGreSQL - هو برنامج تشغيل ممتاز.إذا كنت قد استخدمت إطار عمل ADO.NET الأكثر تقليدية، فأنت محظوظ حقًا هنا.لدي رمز يتصل بـ Oracle والذي يبدو مطابقًا تقريبًا لاتصالات PostGreSQL.من الأسهل الانتقال من Oracle وإعادة استخدام خلايا الدماغ.

وهو يدعم جميع الأشياء القياسية التي تريد القيام بها عند استدعاء SQL، ولكنه يدعم أيضًا الاتصال المهام (الإجراءات المخزنة).وهذا يشمل عودة المؤشرات المرجعية.الوثائق مكتوبة بشكل جيد وتقدم أمثلة مفيدة دون أن تكون فلسفية أو غامضة.اسرق الكود مباشرة من الوثائق وسيعمل على الفور.

لقد قام فرانسيسكو فيغيريدو جونيور وفريقه بعمل رائع في هذا الأمر.
وهي متاحة الآن على جيثب.
https://github.com/franciscojunior/Npgsql2

أفضل موقع للمعلومات هو:http://npgsql.projects.postgresql.org/

اقرأ الوثائق!http://npgsql.projects.postgresql.org/docs/manual/UserManual.html

يوجد موفر Linq لـ PostgreSQL على https://www.nuget.org/packages/linq2db.PostgreSQL/.

لقد قمنا بتطوير العديد من التطبيقات باستخدام visual studio 2005 مع موفر بيانات devart ado.net لـ PostgreSql (http://www.devart.com/pgsqlnet/).

إحدى مزايا هذا الموفر هو أنه يوفر الدعم الكامل لـ Visual Studio.تتضمن أحدث الإصدارات جميع ميزات إطار العمل الجديد مثل linq.

اليوم، يمكن لمعظم اللغات/الأنظمة الأساسية (Java و.NET وPHP وPerl وما إلى ذلك) العمل مع أي نظام إدارة قواعد بيانات تقريبًا (SQL Server وFirebird وMySQL وOracle وPostgresSQL وما إلى ذلك) لذا لن أقلق ولو لثانية واحدة.من المؤكد أنه قد يكون هناك مواطن الخلل والمشاكل الصغيرة ولكن لا يوجد مانع.

كما اقترح jalcom، يجب عليك البرمجة مقابل مجموعة من الواجهات أو على الأقل مجموعة من الفئات الأساسية (DbConnection وDbCommand وما إلى ذلك) للحصول على تطبيق قابل للتكيف بسهولة.

لا ينبغي أن يكون لديك الكثير من المشاكل.كما ذكر آخرون، هناك العديد من موفري بيانات .Net PostgreSQL المتاحين.شيء واحد قد ترغب في البحث عنه هو أن ميزات مثل Linq ربما لن تكون قادرة على استخدامها.

لا تدع نقص دعم Linq يوقفك.النمط الذي أستخدمه هو إعادة بياناتي دائمًا إلى القوائم، ثم ربطها بعيدًا.لقد بدأت في القيام بذلك دينيًا عندما وجدت أن نفس تعبير Linq (الغامض) في MySQL لم يعيد نفس البيانات كما حدث في Sql Server.

ما عليك سوى الانتقال إلى الأداة -> مدير الحزم NuGet -> مدير الحزم Nuget

بحث عن NpgSql ثم حدد المشروع الخاص بك وانقر فوق تثبيت

عينة من الرموز

public void Demo()
        {
            NpgsqlConnection connection = new NpgsqlConnection();
            connection = d_connection; // your connection string
            connection.Open();              
            NpgsqlCommand cmd = new NpgsqlCommand();
            try
            {
                cmd.Connection = connection;
                cmd.CommandText = "select * from your table name";
                cmd.CommandType = System.Data.CommandType.Text;
                using (var dataReader = cmd.ExecuteReader())
                {
                    while (dataReader.Read())
                    {

                     string answer= dataReader.IsDBNull(0) ? "" : dataReader.GetString(0);

                    }
                    dataReader.Dispose();
                }
            }
            catch (Exception e)
            {
            }
            finally
            {
                cmd.Dispose();
                connection.Dispose();
            }            
        }

لا تستخدم الأحرف الكبيرة في postgreSql لأنها حساسة لحالة الأحرف.

يعد Npgsql برنامج تشغيل ممتاز، ولكن المشكلة الوحيدة التي وجدتها حتى الآن هي أن القيمة الرقمية لا تتناسب مع System.Decimal، لذا فإن الخيار الوحيد هو الصحيح لكل استعلام أو مخطط قاعدة بيانات

https://github.com/npgsql/Npgsql.EntityFrameworkCore.PostgreSQL/issues/438#issuecomment-486586272

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