كيف يمكنني إنشاء جدول VFP جديد (OLEDB) جديد من واحد باستخدام .NET؟

StackOverflow https://stackoverflow.com/questions/1686530

سؤال

لدينا تطبيق يقوم بإنشاء عدد من جداول Visual FoxPro (DBF). تحتوي كل من تلك الطاولات على مخطط مختلف، لكنهم جميعا يحتويوا على حقل تاريخ معروف.

لقد طلب مني إنشاء تطبيق آخر (في C #) الذي سيقوم بنسخ بيانات الأسبوع الماضي من كل جدول إلى جدول جديد (في مجلد مختلف إلى جداول المصدر). ستبقى الجداول المميزة (على سبيل المثال إذا كان هناك ثلاثة جداول مصدر، سيكون هناك ثلاثة طاولات وجهة).

بمرور الوقت، قد يتغير الجداول (مثل الحقول الجديدة المضافة)، لذلك لا يمكنني تقديم افتراضات حول بنية الجدول (بصرف النظر عن وجود حقل التاريخ المذكور أعلاه).

ما هي أسهل / أفضل طريقة لأخذ البيانات من جدول واحد وإنشاء جدول جديد بنفس البنية؟

أعرف كيفية الاستعلام عن الجداول لاستخراج البيانات (مثل ملء مجموعة بيانات باستخدام سجلات الأسبوع الماضي). ومع ذلك، أعتقد أنه يجب أن تكون هناك طريقة أفضل لإنشاء طاولة جديدة وملءها بالنتائج أكثر من تحليل جميع المعلومات الميدانية يدويا في المخطط واستخدام ذلك لإعادة إنشاء جدول الوجهة.

يبدو أن العمل مع FoxPro مختلفا بما يكفي من SQL Server لتعطيني صداعا في كل منعطف، لذلك أحتاج إلى بعض الإرشادات في نهجي.

يحتوي جهاز الإنتاج على برنامج تشغيل VFP 9 OLEDB مثبت عليه. إذا كان ذلك ممكنا، فنحن نفضل عدم التثبيت الكثير آخر.

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

المحلول

للحصول على نسخة محددة من البيانات والجدول والسجلات، يمكنك القيام بذلك عبر SQL-Select عبر SQL

OleDbConnection oConn = new OleDbConnection("Provider=VFPOLEDB.1;Data Source=C:\\SomePath");
OleDbCommand oCmd = new OleDbCommand();
oCmd.Connection = oConn;
oCmd.Connection.Open();
oCmd.CommandText = "select * from SomeTable where someCondition into table YourNewTable";
oCmd.ExecuteNonQuery();         
oConn.Close();

قد يكون جملة الخاص بك تقريبا أي شيء تقريبا، ويخبر جملة الجدول بمحرك VFP لإنشاء النتيجة تعيين كجدول جديد، لذلك لا حاجة لإعلان أنواع الأعمدة، والأعمدة، إلخ، بيانات الاستعلام من واحد وادفع إلى آخر ...

قضية واحدة من الاعتبار ... تحقق من الوصول إلى المستخدم من الواضح أن تكون قادرا على إنشاء أو قراءة أو الكتابة أينما كنت تحاول إنشاء جدول جديد. يمكنك حتى تحديد مسار مؤهل بالكامل، مثل C: slactotherpath الشهرية mytable1 إذا لزم الأمر ...

نصائح أخرى

جرب شيئا مثل هذا (ملاحظة مكتوبة في VB.NET وتحويل الاستخدام www.developerfusion.co.uk/tools):

using System.Data.OleDb; 
using System.IO; 

static class Module1 
{ 
    public static void Main() 
    { 
        OleDbConnection oConn = new OleDbConnection("Provider=VFPOLEDB.1;Data Source=C:\\"); 
        OleDbCommand oCmd = new OleDbCommand(); 

        { 
            oCmd.Connection = oConn; 
            oCmd.Connection.Open(); 
            // Create a sample FoxPro table 
            oCmd.CommandText = "CREATE TABLE Table1 (FldOne c(10))"; 
            oCmd.CommandType = CommandType.Text; 
            oCmd.ExecuteNonQuery(); 
        } 

        oConn.Close(); 
        oConn.Dispose(); 
        oCmd.Dispose(); 
    } 
} 

يمكنك ببساطة القيام:

select * from myTable into table newTable [database dbName]

كما أظهر دراب. ومع ذلك، قد ترغب في الحصول على الفهارس أيضا (إن وجدت) (BTW إنشاء فهارس VFPOLEDB غير مدعومة مباشرة ولكن يمكنك القيام بذلك باستخدام وظيفة Execscript ()). ثم يكون الأسهل في نسخ ملفات DBF و CDX (و CDX (و FPT). VFP يستند إلى الملف.

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