2009-06-23 6 views
6

में एनम मैं अपने सी # प्रोग्राम को SQL डेटाबेस से कनेक्ट करने के लिए डेटासेट का उपयोग कर रहा हूं। मैं चाहता हूं कि कॉलम में से एक गणना हो और मैं चाहता हूं कि यह मेरे कोड में एक enum के रूप में कार्य करे। मैं यह कैसे कर सकता हूँ?डेटासेट

उत्तर

8

मेरा मतलब हर किसी के बुलबुले को फटने का मतलब नहीं है, लेकिन आप आसानी से एक टाइप किए गए डेटासेट का उपयोग करके एनम के लिए एक पूर्णांक को मानचित्र बना सकते हैं। मुझे हर व़क्त यह करना है। यहां पूरी चीज को टाइप करने के बजाय मैंने entry on my Blog बनाया है जो विस्तार से वर्णन करता है कि इसे कैसे पूरा किया जाए।

+0

Thaks, यह वही है जो मैं चाहता था। – svick

+0

+1 अच्छा काम उस प्रमाण-अवधारणा को कर रहा है। मुझे पता था कि एक टाइप किए गए डेटासेट के साथ यह संभव था। हालांकि, इस दृष्टिकोण के साथ, क्या आपको डेटासेट में कोई भी बदलाव करने पर xsd फ़ाइल में परिवर्तन फिर से नहीं करना पड़ेगा क्योंकि xsd टाइप किए गए डेटासेट डिज़ाइनर द्वारा स्टॉप किया जाएगा? – James

+0

हां, एक्सएसडी को गिरफ्तार किया जाएगा जो समस्याग्रस्त है। उम्मीद है कि डेटासेट में कस्टम एनम प्रकारों का उपयोग कम हो रहा है, और रखरखाव को कम किया जाएगा। हालांकि, मैं एक पूर्णांक में आगे और पीछे जाने के बजाय सीधे enum प्रकार से निपटना पसंद करता हूं। केवल कुछ ही स्थान हैं जो हम करते हैं, और वे डेटासेट शायद ही कभी बदलते हैं, इसलिए प्रभाव कम है।यदि आप अपने डेटासेट को बहुत अधिक बदल रहे हैं, तो दर्द काफी हद तक बढ़ेगा :( – Josh

0

मुझे नहीं लगता कि आप कर सकते हैं। एसक्यूएल सर्वर में enums की अवधारणा नहीं है।

+0

मुझे परवाह नहीं है कि यह डेटाबेस में कैसे प्रदर्शित किया जाएगा। यह int या स्ट्रिंग हो सकता है। – svick

+0

आपको परवाह है। एक चीज जिसे आप डेटाबेस में प्रतिनिधित्व नहीं कर सकते हैं वह एक enum है। –

+0

असहमत से नफरत है, लेकिन एक enum आसानी से एक लुकअप तालिका द्वारा प्रतिनिधित्व किया जा सकता है जिसमें एक आईडी, और एक नाम है। यह बहुत कुछ किया जाता है, खासकर अगर आप जानते हैं कि लुकअप टेबल केवल तभी बदल जाएगा जब कोड में enum बदलता है। – Josh

0

मैं आपके रिपोजिटरी परत के ऊपर बैठे एक एप्लिकेशन सेवा सेवा का उपयोग करने का सुझाव दूंगा। फिर आपके एप्लिकेशन सेवा वर्ग (इस वर्ग के लिए उपयुक्त नाम के बारे में सोचें) में आप अपने पीओसीओ ऑब्जेक्ट में रिपोजिटरी परत से वापस आने वाले डेटा को बदल सकते हैं।

0

आप strongly typed dataset का उपयोग करने का प्रयास कर सकते हैं।

+0

यह एक enum के साथ कैसे मदद करेगा? –

+0

आप अपने कस्टम एनम के प्रकार में कॉलम डेटा प्रकारों में से किसी एक को बदलने/जोड़ने के लिए इस निर्माण का उपयोग कर सकते हैं। जब तक संख्यात्मक डीबी मान इसे भरते हैं, तो enum के दायरे में हैं, मुझे विश्वास है कि यह काम कर सकता है। इसके लिए आंशिक कक्षा जोड़ने या जेनरेट किए गए एक को संशोधित करने की आवश्यकता होगी। – James

+0

यहां तक ​​कि यह काम मानते हुए, यह एक रखरखाव समस्या है, क्योंकि अब आपके पास उस कॉलम में मान्य होने की कई परिभाषाएं हैं। साथ ही, मुझे यह जानकर आश्चर्य होगा कि ADO.NET निश्चित रूप से एक कलाकार का प्रदर्शन करेगा जो आप कोड में नहीं कर सकते: MyEnum e = 1; संकलन नहीं करेंगे। –

0

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

डेटा को एनम के रूप में संग्रहीत नहीं किया जा सकता है, लेकिन जब तक डेटाबेस कॉलम में डेटा एक पूर्णांक प्रकार का होता है तब तक उन्हें फैंसी फ़िल्टर के रूप में उपयोग किया जा सकता है। यह एक अलग अलग सवाल है यदि आप यही कर रहे हैं। MSDN page पर जाएं और एनम पर पढ़ें।