يقوم مباحث أمن الدولة بإخراج سلسلة Unicode كرمز حرف Shift-JIS إلى ملف نصي
الأنماط التي تؤدي إلى أخطاء
افترض أن عمود من نوع nvarchar في جدول على SQL Server يحتوي على سلسلة لا يمكن استخدامها في Shift-JIS. بالمناسبة ، إذا وضعت هذه الأحرف في عمود varchar ، فهناك أحرف لا يمكن استخدامها ، مثل عمود "ColumnShiftJis" على اليمين. استبدله.
في مباحث أمن الدولة، يتم إعداد التدفق لقراءة البيانات من الجدول السابق كما هو موضح في الشكل وإخراجها إلى ملف نصي.
افترض أنك تريد إخراجه كملف CSV. نظرا لأن Shift-JIS غالبا ما يستخدم في ملفات CSV، قم بتعيين ترميز الأحرف للملف النصي إلى Shift-JIS.
إذا قمت بالتنفيذ باستخدام هذا الإعداد ، فسيحدث خطأ في توقيت الإخراج.
تظهر رسالة خطأ مشابهة لما يلي:
سيتم أيضا مقاطعة ملف الإخراج في منتصف الطريق عند حدوث الخطأ.
إذا حاولت الإخراج كما هو ، فسيكون ذلك خطأ ، لذا حاول دمج "تحويل البيانات" في المنتصف.
قم بتحويل نوع البيانات من "DT_WSTR" إلى "DT_STR" واجعله نموذجا يمكن إخراجه إلى Shift-JIS.
ومع ذلك ، إذا قمت أيضا بتنفيذ هذا ، فستحصل على خطأ. وذلك لأن مباحث أمن الدولة تفشل بشكل صارم في المعالجة الضمنية التي تتسبب في فقدان البيانات. إذا كنت تريد أن تقوم مباحث أمن الدولة بإجراء معالجة النص غير المكتوب، فستحتاج إلى تحديد استبدال الأحرف بشكل صريح لجميع الأحرف.
الحلول البديلة
هناك طريقة لتغيير نوع النص باستخدام SQL عند القراءة من جدول في قاعدة بيانات. إذا كان SQL ، فهو محرك SQL Server الذي يقوم بتشغيله ، وليس SSIS ، بحيث يمكن تشغيله بدون أخطاء. بالمناسبة ، جميع الأحرف التي لا يمكن استخدامها في Shift-JIS هي "؟" تم التحويل إلى: هذه مواصفات جانب SQL Server. حتى لو لم يكن SSIS ، فإن النتيجة مشابهة لجميع الأنظمة التي تستخدم SQL Server.
افتح ADO NET Translator وقم بتغيير وضع الوصول إلى البيانات إلى SQL Command. الآن بعد أن يمكنك إدخال SQL ، اكتب عبارة Select لاسترداد البيانات من قاعدة البيانات. يتم تحويل النص الذي يحتوي على أحرف لا يمكن استخدامها في Shift-JIS قسرا إلى varchar باستخدام cast.
نظرا لأن الأحرف التي لا يمكن استخدامها في Shift-JIS قد تمت إزالتها بالفعل في وقت تدفق البيانات إلى SSIS ، يمكن تمرير المعالجة كما هي.
يمكنك أن ترى أن النص مكتوب بنجاح إلى CSV. أيضا، جميع الأحرف التي لا يمكن استخدامها في Shift-JIS هي "؟" يمكنك أن ترى أنه تم تحويله إلى: