2009-05-18 16 views
5

में निरर्थक अंतर कॉलम मैं .NET दृढ़ता से टाइप किए गए डेटासेट के साथ काम कर रहा हूं और एक तालिका को एक निरर्थक int कॉलम (और एक नामुमकिन डेटटाइम कॉलम) के साथ भी काम कर रहा हूं।डेटासेट

स्पष्ट रूप से डेटासेट डिज़ाइनर के साथ एक बग है जो इन डेटा प्रकारों पर निरर्थक कॉलम को रोकता है। डिजाइनर केवल शून्य मानों के लिए डिफ़ॉल्ट व्यवहार के रूप में "अपवाद फेंकने" की अनुमति देता है। दुर्भाग्यवश, डेटाबेस में एक शून्य डेटा प्रकार का उपयोग करते समय, एक शून्य मान वैध मान है लेकिन डेटा पंक्ति से इस मान को पुनर्प्राप्त करने का प्रयास करते समय एक अपवाद में परिणाम होता है।

मैंने इस समस्या के बारे में कई समाचार समूह पोस्टिंग देखी हैं लेकिन इस मुद्दे पर अभी तक कोई सभ्य कामकाज नहीं देखा है।

मुझे यह सुनना अच्छा लगेगा कि दूसरों ने इस समस्या का सामना कैसे किया है।

धन्यवाद।

+0

वर्गीकरण: डेटासेट डीबीएनयूएल (डिफ़ॉल्ट मान) का उपयोग कर रहा है, शून्य नहीं। – goombaloon

उत्तर

2

DBNull मूल रूप से लाया गया था, गैर नल मूल्य प्रकार से निपटने के .NET 2.0 पूर्व खेलने के लिए:

जिसके परिणामस्वरूप एक्सएमएल कुछ इस तरह दिखेगा। ADO.NET के डिज़ाइन के कारण, जब तक आप अधिक प्रत्यक्ष दृष्टिकोण नहीं चुनते हैं, तब तक आप डीबीएनयूएल से बच सकते हैं। डीबीएनयूएल एडीओ.NET के मूल में बनाया गया है, इसलिए यदि आप इसका उपयोग करना चाहते हैं, तो आपको इसके साथ रहना सीखना होगा।

यदि आप जेनेरिक सिस्टम पर निर्भर होने के बजाय अपनी खुद की डेटा ट्रांसपोर्ट ऑब्जेक्ट प्रदान करते हैं। डेटा नामस्थान, यदि डेटा शून्य है, तो आप जांच सकते हैं (डेटा रीडर के साथ परिणामों में पढ़ते समय), लेकिन आपको कुछ तरीके की आवश्यकता होगी दृढ़ता से टाइप की गई वस्तुओं और मैपिंग उत्पन्न करने के लिए क्योंकि यह वास्तव में कठिन काम है।

मेरे ज्ञान की सीमा तक, डीबीएनयूएल एडीओ.NET के डिज़ाइन में बनाया गया है और यदि आप इसका उपयोग करते हैं तो अपने ऐप्स बनाने का सबसे अच्छा तरीका है, डीबीएनयूएल और नल को सहारा (सामान्यीकृत) करना है। असल में, अपनी खुद की डीबीकॉन्टर क्लास प्रदान करें जो डीबीएनयूएल को रोकती है और यदि डीबीएनयूएल मान है तो वास्तविक शून्य संदर्भ देता है। यह एक न्यूनतम आवश्यकता है, लेकिन जैसे ही यह किया जाता है, आपके पास चिंता करने के लिए चारों ओर तैरने वाले कम डीबीएनएल मूल्य होंगे।

0

यह थोड़ी देर के बाद से मैंने टाइप किए गए डेटासेट का उपयोग किया है, लेकिन मैं अपने पुराने कोड में देखता हूं जो codegen:nullValue विशेषता का उपयोग करता है। मुझे नहीं लगता कि यह डिजाइनर द्वारा समर्थित है, कम से कम वीएस2005 (जिसे मैंने उस प्रोजेक्ट के लिए उपयोग किया था) में नहीं है, इसलिए आपको अपनी एक्सएसडी फाइल को एक्सएमएल एडिटर में खोलना होगा और इसे हाथ से करना होगा।

<xs:sequence> 
    <xs:element 
     name="MyIntColumn" 
     codegen:nullValue="0" 
     type="xs:int" 
     minOccurs="0" /> 
    <xs:element 
     name="MyBoolColumn" 
     codegen:nullValue="false" 
     type="xs:boolean" 
     minOccurs="0" /> 
    <xs:element 
     name="MyDateColumn" 
     codegen:nullValue="1900-01-01" 
     type="xs:dateTime" 
     minOccurs="0" /> 
</xs:sequence> 
+2

दुर्भाग्यवश यह "जादू संख्या" की अवधारणा को प्रस्तुत करता है, जो कुछ संभव है तो मैं बचाना चाहता हूं। (यानी, "नल" बहुत स्पष्ट रूप से शून्य है, जबकि "0" नहीं है) –

8

मुझे लगता है कि ASP.NET मंच पर इस पोस्ट प्रश्न के लिए कुछ मदद की हो जाएगा: Strongly-Typed DataSet/Nullable column issue

अशक्त करने के लिए इस तरह के गुणों को सेट करने का एकमात्र तरीका सहायक तरीकों कि डाटासेट जनरेटर उपयोग करने के लिए है भी बनाता है। तो अपने मामले में, आप डेटा पंक्ति वस्तु बुलाया IsApprovingUserNull पर तरीकों होना चाहिए तरीकों, अपने स्तंभ नाम पर रखा जाता है() और SetApprovingUserNull()।