هل من الممكن إنشاء SQL Server الأصلي ملف من c# (مثل BCP تنسيق أصلي)

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

  •  05-07-2019
  •  | 
  •  

سؤال

نحن نقوم بتحديث عمرها 15 رمز قاعدة ، هناك حاجة إلى إنشاء بعض مواليد BCP تنسيق ملفات البيانات.

في النظام الجديد ، فإننا من الناحية المثالية مثل استخدام البيانات في C# DataTable كائن إلى إنشاء ملف بيانات في الأم تنسيق BCP.

يمكن أن يتم ذلك وإذا كان الأمر كذلك ما يمكن أن يكون أفضل نهج ؟

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

المحلول

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

نصائح أخرى

وإذا كان كبيرا في السن، ثم BCP قطعة قد تبدو الى حد كبير مثل قطعة سايبيس BCP. في سايبيس كنت تبدأ في النظر في يملكون مكتبات العميل وشحنها أمثلة التعليمات البرمجية باستخدام BCP API. CTLib و / أو جافا الجرار لAPI المقابلة. لمايكروسوفت قد يكون هناك أجزاء مماثلة من C الأصلي أو API الأساسية التي تنطوي BCP. قد لا تحتاج الجزء الاتصالات من API، مجرد تسجيل تلو سجل إعداد ويقرأ / يكتب إلى ملف.

وإذا لم يكن هناك شيء من هذا القبيل، ثم كنت تنظر شكل غير الناطقين بها مع اليد التي قدمت ملفات FMT ومثل النص ملفات البيانات، أنتجت / يستهلكها البرنامج BCP الأصلي.

وهناك طريقة مشابهة للقيام بذلك، ولكن عليك أن ترجع SQLDMO وانها سوف تخلق شكل يعادل تماما مثل BCP. باستخدام كائن BulkCopy من SQLDMO، يمكنك أن تفعل ما كنت تبحث عنه. وإليك وصلة إلى روتين عمله في VBScript والذي يستخدم مكتبة SQLDMO هنا .

ويساعد هذا الأمل، تحياتي الحارة، توم.

هل أنت قادرة على وضع البيانات في datatable في منطقة التدريج على SQL Server?إذا كان الأمر كذلك, يمكنك تفرخ من عملية BCP.

BCP: http://msdn.microsoft.com/en-us/library/aa174646%28SQL.80%29.aspx

على سبيل المثال انا استخدم:

BCP Database.Schema.TableName OUT FileName.Ext -S ServerName -T -n

مفاتيح:

  • -S هو الخادم
  • -T هو الاتصال الموثوق بها
  • -n هو تنسيق أصلي

تحرير + فكرة جديدة:

إذا كان لديك الوصول إلى الاستفسارات التي تملأ datatable ، يمكن استخدام هذه مع BCP أو SQLDMO على التصدير إلى تنسيق أصلي الملف.الاستعلامات التالية استخدام QUERYOUT التبديل بدلا من الخروج التبديل لأنها تحتوي على مضمنة الاستفسارات

تصدير أعمدة معينة من الرأي:

BCP "SELECT Column1, Column2 FROM MyViewName" QUERYOUT FileName.Ext -S ServerName -T -n

تصدير محددة أعمدة من الانضمام:

BCP "SELECT Table1.Column1, Table2.Column2 FROM Table1 INNER JOIN Table2 on Table1.Column33 = Table2.Column33" QUERYOUT FileName.Ext -S ServerName -T -n

وعلى افتراض انك لا تملك إلا ثابتة مع أنواع الأعمدة في الجدول الوجهة، لا شيء قيم الفارغة، بدون قيود أو يونيكود، ونحن مستعدون للتعامل مع endian نيس، ثم تنسيق الملف الأصلي هو مجرد بايت من أنواع.

وأنا مؤخرا يتناولن البيانات التي تم استيرادها من ج # النصي من خلال كتابة ملف تجهيز بايت بواسطة البايت واستخدام BCP

bcp destTable in model.raw -T -S _serverName -n

وmodel.raw iscreated بايت حكيم حسب:

fileBytes = new byte[theLength * 4]; // * 4 bytes per element for int and float
var offset =0;

    foreach (var element in outputDimensions)
    {
        // fastCopy is a faster and "Unsafe" equivelent of BlockCopy , faster because it doesn't create an intermediate byte array.
        //Buffer.BlockCopy(BitConverter.GetBytes(profileid), 0, fileBytes, offset, 4);
        Utilities.fastCopy(profileid, fileBytes, offset);
        offset += 4;
        Utilities.fastCopy(element.index, fileBytes, offset);
        offset += 4;
        for (var i = 0; i < TimeSlices; i++, offset += 4)
        {
            float target = GetDataForTime(i,...);
            Utilities.fastCopy(target, fileBytes, offset); 
        }
    }

FileStream dataWriter.Write(fileBytes , 0, byteArray.Length);
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top