سؤال

خلفية:

يولد تطبيق C # الخاص بنا وتنفذ الاستعلامات إلى عدة أنواع من قواعد البيانات (Oracle و SQL Server و MySQL)، ولكن تمت طرح شرط أيضا لتطبيقها أيضا على تنسيق ملف خاص.

  1. مساحة الاسم المستخدمة حتى الآن هو system.data.common.
  2. الاستعلامات التي نحتاجها إلى تطبيق غير تافهة (اختار متداخلة، الأسماء المستعارة من، أساليب السلسلة الفرعية وسلسلة السلسلة)

لقد تحولنا في البداية إلى محتويات الملف الملكية إلى CSV، والتي توجد فيها السائق {Microsoft Text Driver (* .txt؛ * .csv)}. وبعد ومع ذلك، فإن العميل مطلوب أنه لا يتم إنشاء ملفات TEMP، وينبغي أن يحدث كل شيء في الذاكرة.

إنشاء برنامج تشغيل ODBC لاستعلام الملف يبدو مباشرا للغاية. لذلك، نحن ننظر في إنشاء برنامج تشغيل (ربما ODBC)، حيث سنقوم "بتضمين" سائق ODBC SQLite. داخل هذا السائق، يمكننا تحميل محتويات ملفات CSV في قاعدة البيانات "في الذاكرة"، ثم إعادة توجيه الاستعلام إلى برنامج تشغيل ODBC الداخلي.

أسئلتي:

  1. هل يبدو هذا الحل ممكنا؟
  2. أين يجب أن نبدأ من أجل إنشاء برنامج تشغيل ODBC من الصفر؟

شكرًا

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

المحلول

إذا كان استخدام SQLite كخلفية هو احتمال، لا أستطيع أن أرى حقا لماذا لا يمكنك استخدام مزود ADO .NET لقاعدة بيانات SQLite الخاصة بك system.data.sqlite..


من تعليقك، أعتقد أنك ساري المفعول باستخدام موفر ODBC ADO .NET لجميع اتصالات قاعدة البيانات (System.Data.odbc). إذا كنت بحاجة إلى الحفاظ على نفس المخطط، فإن موفر ODBC مخصص هو الطريق للذهاب (ولكن بعد ذلك، فهذا هو التطور الأصلي C عادي، وأمن مؤلم وأعتقد).

طريقة أخرى للذهاب ستكون لإضافة معلمة ثالثة إلى DB (أول اثنين من SQL وسلسلة الاتصال): موفر ADO .NET المستخدمة (كما هو من المفترض أن تتم في ملفات التكوين, ، انظر providerName ينسب). بهذه الطريقة يمكنك استخدام أي موفر ADO .NET المتاحة.

ثم يمكنك التفاف موفر SQLite في مزود مخصص الخاص بك، مخصص، ADO .NET، والتي يمكن أن تشمل توليد وسكان SQLite DB. ميزة هذا الحل: نقية مدارة .NET.

نصائح أخرى

طلب العميل غريب. سيكون هناك دائما الملفات المعنية، أنت تقرأ من ملف.

إذا كانوا يريدون أشياءهم في الذاكرة (مرة أخرى عميل غريب) ضع csvs على قرص ذاكرة الوصول العشوائي:http://members.fortunecity.com/ramdisk/ramdisk/ramdriv001.htm.

Building and Odbc Drive هو تعهد غير جرادي إذا كنت تهتم بالأداء والاستقرار.

أعتقد أن الحل الخاص بك هو الوقت المستهلكة. يمكنك العثور على حلول موجودة لما تحاول القيام به. هنا عدد قليل من البائعات.

لماذا لا تحاول LinQ إلى ملف نص / CSV؟

كلا الحلول في الذاكرة.

فكرة أخرى هي أنه، يمكنك تصدير الملف في XML بدلا من CSV أو النص (أفضل التصدير دائما إلى XML عندما يتعين علي معالجة في التعليمات البرمجية الخاصة بي). مما تستخدم System.xml أو Linq إلى XML لأداء العمليات.

إذا كنت تقتصر فقط عدم إنشاء ملفات مؤقتة، فقد تحاول استخدام وضع SQLite في الذاكرة. ها هي عينة من سلسلة الاتصال لذلك (مصدر):

Data Source=:memory:;Version=3;New=True;

إلى ذهني، هذا أبسط من بناء مزود كامل في المنفأة. $

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