2012-10-10 11 views
5

डाला गया है, मैं SQL Server डीबी में सी # कोड से SQLXMLBulkLoader4 का उपयोग करने का प्रयास कर रहा हूं। लेकिन किसी कारण से यह किसी भी त्रुटि को फेंकने के बावजूद किसी भी पंक्ति को सम्मिलित नहीं करता है। मैंने bullloads की अपनी त्रुटि लॉग फ़ाइल का उपयोग किया है, (किसी भी त्रुटि की जांच करने के लिए जो इसे क्रैश नहीं कर सकता है), लेकिन कोई त्रुटि रिपोर्ट नहीं की गई है।एसक्यूएलएक्सएमएल बल्कलोडर कोई त्रुटि नहीं फेंक रहा है लेकिन कोई डेटा

मेरे पास एक एक्सएमएल फ़ाइल है जो एक सप्लायर (मूल रूप से उत्पादों की एक सूची) से डाउनलोड की गई है, मैंने फ़ील्ड से हमारे डीबी में मिलान करने के लिए एक एक्सएसडी लिखा है। उन विशिष्ट तालिकाओं को और कुछ नहीं लिख रहा है, और उन फ़ाइलों का उपयोग करके और कुछ नहीं।

public void Bulkload(string schemaFile, string xmlFile, string source) 
    { 
     SQLXMLBULKLOADLib.SQLXMLBulkLoad4 bulkload = new SQLXMLBULKLOADLib.SQLXMLBulkLoad4(); 

     try 
     { 
      bulkload.ConnectionString = "Provider=sqloledb;server=X;database=X;uid=X;pwd=X"; 
      bulkload.ErrorLogFile = k_ArticleInfoDirectory + source + "BulkLoadError.log"; 
      bulkload.KeepIdentity = false; 
      bulkload.Execute(schemaFile, xmlFile); 
     } 
     catch (Exception e) 
     { 
      Console.WriteLine("Fel i BL: " + e); 
      throw; 
     } 
     finally 
     { 
      bulkload = null; 
     } 

    } 

एक्सएमएल इस (नीचे छीन तरह लग रहा है, नीचे सब कुछ बस कुछ और उत्पाद-क्षेत्रों और है:

मेरे BulkLoad कोड के रूप में इस प्रकार है (मैं वास्तविक कनेक्शन स्ट्रिंग मूल्यों बाहर X'ed) लग रहा है तो और अधिक उत्पादों):

<?xml version="1.0" encoding="utf-8"?> 
<GetProductsResult xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
    <Status xmlns="http://schemas.servicestack.net/types"> 
    <Code>0</Code> 
    <Message>Ok</Message> 
    </Status> 
    <NumberOfProducts xmlns="http://schemas.servicestack.net/types">9826</NumberOfProducts> 
    <Products xmlns="http://schemas.servicestack.net/types"> 
    <Product> 
     <ProductID>1000002</ProductID> 
     <CreatedDate>2011-11-24 15:54</CreatedDate> 
     <UpdatedDate>2011-11-24 15:54</UpdatedDate> 
     <Title>Vi tolererar inga förlorare - klanen Kennedy</Title> 
     <Publisher>Piratförlaget</Publisher> 
     ... And some more fields per Product 

XSD मैं) इस (फिर छोटा जैसी लगती है लिखा है:

<?xml version="1.0" encoding="iso-8859-1"?> 
<xs:schema targetNamespace="http://schemas.servicestack.net/types" xmlns:xs="http://www.w3.org/2001/XMLSchema" attributeFormDefault="qualified" elementFormDefault="qualified" xmlns:sql="urn:schemas-microsoft-com:mapping-schema"> 

<xs:annotation> 
    <xs:appinfo> 

     <sql:relationship name="Status" 
     parent="tblElibProduct" 
     parent-key="id" 
     child="tblElibStatus" 
     child-key="product_id" /> 
        ... + Several other sql:relationships 
      </xs:appinfo> 
</xs:annotation> 
    <xs:element name="GetProductsResult" sql:is-constant="1"> 
    <xs:complexType> 
     <xs:sequence> 
      <xs:element name="Status" sql:is-constant="1"> 
       <xs:complexType> 
        <xs:sequence> 
         <xs:element name="Code" type="xs:integer" minOccurs="0" /> 
         <xs:element name="Message" type="xs:string" minOccurs="0" /> 
        </xs:sequence> 
       </xs:complexType> 
      </xs:element> 
      <xs:element name="NumberOfProducts" type="xs:string" sql:is-constant="1"/> 
      <xs:element name="Products" sql:is-constant="1"> 
       <xs:complexType> 
        <xs:sequence> 
         <xs:element minOccurs="0" maxOccurs="unbounded" name="Product" sql:relation="tblElibProduct"> 
          <xs:complexType> 
           <xs:sequence> 
            <xs:element minOccurs="1" maxOccurs="1" name="CreatedDate" type="xs:date" sql:field="created_date" /> 
            <xs:element minOccurs="1" maxOccurs="1" name="UpdatedDate" type="xs:date" sql:field="updated_date" /> 
            <xs:element minOccurs="1" maxOccurs="1" name="Title" type="xs:string" sql:field="title" /> 

मैंने नामस्थानों पर खुद को अंधेरा देखा है, लेकिन वे मेरे लिए सही लग रहे हैं। (ऐसी कई त्रुटियों के बारे में पढ़ें जहां विभिन्न नामस्थान कारण थे)। कोड मेरे कंप्यूटर से चल रहा है, मेरे कंप्यूटर और डीबी के साथ एक को एक्सएमएल और एक्सएसडी फाइलों के साथ नेटवर्क फ़ोल्डर तक पहुंच है।

मैंने जानबूझकर दोनों फाइलों में कुछ फ़ील्ड-नामों को बदलने की कोशिश की है, और बल्कलोडर फ़ील्ड पर एक त्रुटि फेंकने की कोशिश करता है जिसे मैंने अभी बदल दिया है।

मैंने नेट पर पाए गए उदाहरणों के लिए अपने बल्कलोडर कोड और एक्सएसडी दोनों की तुलना की है, और मुझे इस व्यवहार के लिए कोई फर्क नहीं पड़ता है।
शायद यह कुछ आसान है जो मैं देख रहा हूं, लेकिन मैं इसे एटीएम नहीं देख रहा हूं।

सही दिशा में मुझे इंगित करने में कोई भी मदद गहराई से स्वागत है।

अग्रिम धन्यवाद!

(पी एस क्षमा करता है, तो पोस्ट किसी तरह से बंद है, यह मेरी पहली बार यहाँ पोस्टिंग, मैं फिर भी मेरी अनुसंधान कर किया है और मैं = कैसे पोस्ट करने के लिए पर दिशा निर्देशों का पालन करने की कोशिश की थी))

उत्तर

1

अप के बाद आपके संदेह पर कि नामस्थान समस्या हो सकती है ...

उदाहरणों में योग्य तत्वों के लिए नामस्थान मिलान (तत्व उदाहरण और तत्व घोषणा के बीच) मिलान करते हैं।

लेकिन वे सभी अन्य दिशाओं में मेल नहीं खाते हैं; स्कीमा एक तत्व घोषित करता है जिसका विस्तारित नाम {http://schemas.servicestack.net/types}GetProductsResult है, लेकिन इनपुट उदाहरण में ऐसा कोई तत्व दिखाई नहीं देता है (एक GetProductsResult है, लेकिन यह नामस्थान-योग्य नहीं है)। अपने XSD के विरुद्ध अपने XML सत्यापित करें:

आप देखने के लिए अगर आप XML बदल सकते हैं कि पहले स्टार्ट टैग

<GetProductsResult 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
    xmlns="http://schemas.servicestack.net/types" > 
+0

वह टिकट था! G'dang नामस्थान मेरे दिन बर्बाद कर रहे हैं ... त्वरित उत्तर के लिए धन्यवाद! =) – MrWizard

1

प्रथम नियम का पालन करने के लिए करना चाहिए हमेशा जा पढ़ता है क्या होता है चाहते हो सकता है। आपके मामले में, ऐसा लगता है कि आपको अपने एक्सएमएल की बजाय अपने एक्सएसडी को बदलना है क्योंकि आप अपने एक्सएमएल से मेल खाने के लिए अपने एक्सएसडी फिट करने की कोशिश करते हैं - आपने कहा downloaded from a supplier।आपके समाधान को आपूर्तिकर्ता की फ़ाइल के साथ काम करना चाहिए, क्योंकि यदि आप बाद में अपनी फ़ाइल को फिर से लोड करना चाहते हैं, तो आप इसे एक दोषपूर्ण एक्सएसडी के रूप में फिट करने के लिए इसे बदलना नहीं चाहते हैं।

आपको वास्तव में कम से कम दो एक्सएसडी फाइलों की आवश्यकता होती है: एक लक्ष्य नामस्थान के बिना स्कीमा को परिभाषित करता है, और यह एक और स्कीमा आयात करता है जो http://schemas.servicestack.net/types को लक्षित करता है। एक्सएमएल से एक्सएसडी उत्पन्न करने और एक्सएसडी के खिलाफ एक्सएमएल को प्रमाणित करने के लिए कई विकल्प हैं।

+0

यह वास्तव में बहुत समझ में आता है। चूंकि यह अब काम करने के लिए एक फिक्स है, जबकि आपूर्तिकर्ता हमें सत्यापित करने के लिए एक्सएसडी प्रदान करने पर काम करता है। ऐसा नहीं है कि मैं कैसे काम करना पसंद करूंगा, लेकिन जब हम अपने उत्पादों को बेचना चाहते हैं तो क्या करना है ... – MrWizard

संबंधित मुद्दे