PRB: سمات غير منشأ للحقول التي يتضمن قيمة فارغة عند هو مجموعة السجلات ADO الثابتة في XML

هام: تمت ترجمة هذا المقال باستخدام برنامج ترجمة آلية لشركة مايكروسوفت بدلاً من الاستعانة بمترجم بشري. تقدم شركة مايكروسوفت كلاً من المقالات المترجمة بواسطة المترجمين البشر والمقالات المترجمة آليًا وبالتالي ستتمكن من الوصول إلى كل المقالات الموجودة في قاعدة المعرفة الخاصة بنا وباللغة الخاصة بك. بالرغم من ذلك، فإن المقالة المترجمة آليًا لا تكون دقيقة دائمًا وقد تحتوي على أخطاء إملائية أو لغوية أو نحوية، مثل تلك الأخطاء الصادرة عن متحدث أجنبي عندما يتحدث بلغتك. لا تتحمل شركة مايكروسوفت مسئولية عدم الدقة أو الأخطاء أو الضرر الناتج عن أية أخطاء في ترجمة المحتوى أو استخدامه من قبل عملائنا. تعمل شركة مايكروسوفت باستمرار على ترقية برنامج الترجمة الآلية

اضغط هنا لرابط المقالة باللغة الانجليزية296393
تمت أرشفة هذه المقالة. وتظهر "كما هي" ولن يتم تحديثها بعد الآن.
الأعراض
عند الدائمة كائن ADO Recordset بتنسيق XML <z:row/> لا يتم إنشاء سمات عنصر للحقول في به السجلات التي تحتوي على قيمة فارغة. قد يؤثر هذا السلوك العام البرامج النصية تحويل لغة صفحات الأنماط الموسعة (XSLT) والتي تمت كتابتها تحويل XML الدائمة ADO إلى تنسيق بديل. الاحتمال الأرجح ستلاحظ التأثير عند @ * يتم استخدام التعبير لغتي XML Path (XPath) الوصول سمات <z:row/> إلى عناصر تمثل الحقول سجل.

ليس لدى هذا السلوك عن أي تأثير سلبي إذا كنت تستخدم ADO فقط إعادة فتح مجموعة سجلات الدائمة ومعالجتها. كما لم يكن تأثير سلبي على البرامج النصية XSLT التي تتم كتابتها XML الدائمة ADO محدد يشير إلى <z:row/> سمات عنصر باستخدام أسماء الثابت تلوينها. تأثير السالبة فقط التي قد تكون موجودة على البرامج النصية XSLT التي تستخدم @ * تعبير XPath في <z:row/> للرجوع إلى سمات عنصر. لأن السمات لتمثيل الحقول ذات القيم NULL غير موجودة, قد يظهر الإخراج تحويل XSL بشكل غير صحيح تمت محاذاته أو تنسيقه.
السبب
يعتبر هذا السلوك حسب التصميم. راجع المقطع "مزيد من المعلومات" للحصول على شرح مفصل.
الحل
إذا كان يدعم تطبيق SQL من مصدر البيانات الهدف ملحق مثل الدالة T-SQL IsNull Microsoft SQL Server ، يمكنك استخدام هذه الدالة إنشاء استعلام يقوم بإرجاع قيمة ثابتة بديل عمود عند مواجهة قيمة فارغة. مع ذلك، لاحظ أن هذا يعرض مجموعة السجلات غير قابلة للتحديث.
معلومات أخرى
يتم تمثيل كل سجل في ADO Recordset الدائمة بتنسيق XML بواسطة <z:row/> عنصر في XML التي تم إنشاؤها. تتم كتابة الحقول في سجل كـ سمات <z:row/> العنصر الذي يمثل السجل. يجب تعيين سمة XML كل قيمة تم تضمينه في زوج من علامات اقتباس مفرد أو مزدوج. لا يوجد أي مكافئ بتنسيق النص العادي لتدل على قيمة فارغة. زوج من علامات الاقتباس مع أية قيمة لتمثيل سلسلة فارغة غير نفس قيمة فارغة.

خطوات إعادة إنشاء السلوك

  1. تشغيل البرنامج النصي T-SQL التالي في أحد SQL Server قواعد البيانات لإنشاء جدول نموذج يحتوي على سجلات الاختبار:
    create table Employee (emp_id int primary key,emp_name varchar(20),hire_date datetime,emp_level int)Insert into Employee values (1,'Jack','1/1/2001',70)Insert into Employee values (2,'John','2/1/2001',NULL)Insert into Employee values (3,'Peter',NULL,NULL)Insert into Employee values (4,'Pam',NULL,50)					
  2. إنشاء مشروع EXE قياسي جديد في Visual Basic. يتم إنشاء Form1 بشكل افتراضي.
  3. من القائمة المشروع انقر فوق مرجع ثم حدد 2.x كائنات بيانات ActiveX Microsoft مكتبة خانة الاختيار. تأكد من استخدام ADO الإصدار 2.1 أو أحدث.
  4. إضافة عنصر تحكم CommandButton إلى Form1.
  5. انسخ ثم قم بلصق التعليمة البرمجية التالية في إجراء الحدث Click لزر الأمر.

    ملاحظةيجب أن تقوم بتغيير "معرّف المستخدم" <uid>= وكلمة المرور = < كلمة المرور القوية > إلى القيم الصحيحة قبل تشغيل هذه التعليمات البرمجية. تأكد من أن < معرف المستخدم > لديه الأذونات المناسبة لإنجاز هذه العملية على قاعدة البيانات.
    Dim cn As ADODB.ConnectionDim rs As New ADODB.RecordsetSet cn = New ADODB.ConnectionSet rs = New ADODB.Recordsetcn.Open "Provider=SQLOLEDB;Data Source=SQl Server;" & _        "Initial Catalog=Database;User Id=<UID>;Password=<strong password>;"rs.CursorLocation = adUseClientrs.Open "Select * from Employee", cn, adOpenStatic, adLockReadOnlyIf Dir("c:\ADOXMLNULLTest.xml") <> "" Then  Kill "c:\ADOXMLNULLTest.xml"End Ifrs.Save "c:\ADOXMLNULLTest.xml", adPersistXMLrs.CloseSet rs = Nothingcn.CloseSet cn = NothingMsgBox "Employee Recordset has been persisted successfully !"					
  6. تعديل سلسلة اتصال ADO في عبارة cn.Open للإشارة إلى قاعدة بيانات SQL Server الذي أنشأت جدول نموذج في الخطوة 1.
  7. حفظ المشروع وتشغيله. انقر فوق Command1 عند عرض النموذج لتشغيل التعليمات البرمجية ADO Visual Basic الذي يفتح ADO Recordset ثم استمر في تنسيق XML إلى القرص. تتم كتابة عبارة SELECT التي تم تعيينها على أنها المعلمة المصدر في عبارة rs.Open استرداد البيانات التي أدرجتها في جدول نموذج في الخطوة 1.
  8. إيقاف تشغيل المشروع.
  9. في Microsoft Internet Explorer XML الدائمة فتح الملف. فحص في <z:row> عناصر تمثل السجلات الفردية. ملاحظة لا يتم إنشاء سمات لتمثيل الأعمدة التي قمت بإدراجها NULL القيم عند تشغيل البرنامج النصي T-SQL في الخطوة 1. يظهر ملف XML الذي استمرار عبارة rs.Save كما يلي:
    <xml xmlns:s='uuid:BDC6E3F0-6DA3-11d1-A2A3-00AA00C14882'    xmlns:dt='uuid:C2F41010-65B3-11d1-A29F-00AA00C14882'    xmlns:rs='urn:schemas-microsoft-com:rowset'    xmlns:z='#RowsetSchema'><s:Schema id='RowsetSchema'>    <s:ElementType name='row' content='eltOnly'>        <s:AttributeType name='emp_id' rs:number='1' rs:writeunknown='true'>            <s:datatype dt:type='int' dt:maxLength='4' rs:precision='10'             rs:fixedlength='true' rs:maybenull='false'/>        </s:AttributeType>        <s:AttributeType name='emp_name' rs:number='2' rs:nullable='true'         rs:writeunknown='true'>            <s:datatype dt:type='string' rs:dbtype='str' dt:maxLength='20'/>        </s:AttributeType>        <s:AttributeType name='hire_date' rs:number='3' rs:nullable='true'          rs:writeunknown='true'>            <s:datatype dt:type='dateTime' rs:dbtype='timestamp' dt:maxLength='16'              rs:scale='3' rs:precision='23' rs:fixedlength='true'/>        </s:AttributeType>        <s:AttributeType name='emp_level' rs:number='4' rs:nullable='true'          rs:writeunknown='true'>            <s:datatype dt:type='int' dt:maxLength='4' rs:precision='10'              rs:fixedlength='true'/>        </s:AttributeType>        <s:extends type='rs:rowbase'/>    </s:ElementType></s:Schema><rs:data>    <z:row emp_id='1' emp_name='Jack' hire_date='2001-01-01T00:00:00' emp_level='70'/>    <z:row emp_id='2' emp_name='John' hire_date='2001-02-01T00:00:00'/>    <z:row emp_id='3' emp_name='Peter'/>    <z:row emp_id='4' emp_name='Pam' emp_level='50'/></rs:data></xml>					

    الحل البديل

  10. استبدال الاستعلام المحدد كمعلمة مصدر من عبارة rs.Open في إجراء الحدث Click لزر الأمر مع عبارة SQL SELECT التالية:
    Select emp_id, emp_name,isnull(hire_date,'') as hire_date,isnull(emp_level,'') as emp_level from Employee					
  11. حفظ المشروع وتشغيله. انقر فوق Command1 عند عرض النموذج لتشغيل التعليمات البرمجية ADO Visual Basic الذي يفتح ADO Recordset ثم استمر في تنسيق XML إلى القرص.
  12. في Internet Explorer بفتح ملف XML الدائمة. فحص في <z:row> عناصر. لاحظ أن سمات يتم إنشاء أعمدة بقيم فارغة. إنجاز هذا بواسطة استخدام الدالة T-SQL IsNull لإرجاع قيمة بديل افتراضي عند مواجهة فارغة في الأعمدة hire_date أو emp_name. يظهر ملف XML الدائمة كما يلي:
    <xml xmlns:s='uuid:BDC6E3F0-6DA3-11d1-A2A3-00AA00C14882'    xmlns:dt='uuid:C2F41010-65B3-11d1-A29F-00AA00C14882'    xmlns:rs='urn:schemas-microsoft-com:rowset'    xmlns:z='#RowsetSchema'><s:Schema id='RowsetSchema'>    <s:ElementType name='row' content='eltOnly'>        <s:AttributeType name='emp_id' rs:number='1' rs:writeunknown='true'>            <s:datatype dt:type='int' dt:maxLength='4' rs:precision='10'              rs:fixedlength='true' rs:maybenull='false'/>        </s:AttributeType>        <s:AttributeType name='emp_name' rs:number='2' rs:nullable='true'          rs:writeunknown='true'>            <s:datatype dt:type='string' rs:dbtype='str' dt:maxLength='20'/>        </s:AttributeType>        <s:AttributeType name='hire_date' rs:number='3'>            <s:datatype dt:type='dateTime' rs:dbtype='timestamp'              dt:maxLength='16' rs:scale='3' rs:precision='23' rs:fixedlength='true'             rs:maybenull='false'/>        </s:AttributeType>        <s:AttributeType name='emp_level' rs:number='4'>            <s:datatype dt:type='int' dt:maxLength='4' rs:precision='10'              rs:fixedlength='true' rs:maybenull='false'/>        </s:AttributeType>        <s:extends type='rs:rowbase'/>    </s:ElementType></s:Schema><rs:data>    <z:row emp_id='1' emp_name='Jack' hire_date='2001-01-01T00:00:00' emp_level='70'/>    <z:row emp_id='2' emp_name='John' hire_date='2001-02-01T00:00:00' emp_level='0'/>    <z:row emp_id='3' emp_name='Peter' hire_date='1900-01-01T00:00:00' emp_level='0'/>    <z:row emp_id='4' emp_name='Pam' hire_date='1900-01-01T00:00:00' emp_level='50'/></rs:data></xml>					

تحذير: تمت ترجمة هذه المقالة تلقائيًا

خصائص

رقم الموضوع: 296393 - آخر مراجعة: 02/28/2014 00:34:17 - المراجعة: 3.3

Microsoft ActiveX Data Objects 2.1, Microsoft ActiveX Data Objects 2.1 Service Pack 1, Microsoft ActiveX Data Objects 2.1 Service Pack 2, Microsoft ActiveX Data Objects 2.5, Microsoft ActiveX Data Objects 2.6, Microsoft Visual Basic 5.0 Enterprise Edition, Microsoft Visual Basic Enterprise Edition for Windows 6.0, Microsoft Visual Basic 6.0 Enterprise Edition Service Pack 3, Microsoft Visual Basic 6.0 Enterprise Edition Service Pack 4, Microsoft Visual Basic 6.0 Enterprise Edition Service Pack 5, Microsoft Visual Basic 5.0 Professional Edition, Microsoft Visual Basic 6.0 Professional Edition, Microsoft SQL Server 2000 Standard Edition, Microsoft SQL Server 7.0 Standard Edition, Microsoft SQL Server 7.0 Service Pack 1, Microsoft SQL Server 7.0 Service Pack 2, Microsoft SQL Server 7.0 Service Pack 3

  • kbnosurvey kbarchive kbmt kbmsxmlnosweep kbprb KB296393 KbMtar
تعليقات