हमारे पास हमारा स्वयं का ओआरएम है जिसका हम यहां उपयोग करते हैं, और हमारे सभी डीबी टेबल के लिए दृढ़ता से टाइप किए गए रैपर प्रदान करते हैं। हम कमजोर टाइप किए गए विज्ञापन-प्रसार एसक्यूएल को निष्पादित करने की अनुमति भी देते हैं, लेकिन डेटा प्रश्नकर्ता से मूल्य प्राप्त करने के लिए ये प्रश्न अभी भी एक ही कक्षा के माध्यम से जाते हैं।सी # डाटाबेस एक्सेस: डीबीएनएल बनाम शून्य
उस वर्ग Oracle के साथ काम करने के लिए सुधार करने के लिए, हम एक दिलचस्प सवाल का सामना करना पड़ा। क्या डीबीएनयूएल का उपयोग करना बेहतर है। वैल्यू, या शून्य? क्या डीबीएनयूएल का उपयोग करने के कोई लाभ हैं। वैल्यू? यह शून्य का उपयोग करने के लिए और अधिक "सही" लगता है, क्योंकि हमने खुद को डीबी दुनिया से अलग कर दिया है, लेकिन प्रभाव हैं (उदाहरण के लिए कोई मान शून्य होने पर आप अंधेरे से ToString()
नहीं कर सकते हैं) तो निश्चित रूप से हमें कुछ बनाने की आवश्यकता है के बारे में सचेत निर्णय।
मुझे लगता है कि अभी भी डीबीएनयूएल के लिए कुछ उपयोग हैं। कम से कम sqlite के साथ मैं परीक्षण कर सकता हूं कि ExecuteScalar() द्वारा लौटाए गए मान को डेटाबेस में स्पष्ट रूप से संग्रहीत किया गया है या नहीं। टेबल फू (एक int, बी int) पर विचार करें; एक पंक्ति के साथ (1, शून्य)। अगर हम एक आदेश पर ExecuteScalar पर थे "foo से F चुनें जहां ए = 1", यह DBNull वापस करेगा। Value (पंक्ति मौजूद है एक शून्य संग्रहीत है)। अगर मैं ExecuteScalar को "F से F चुनें जहां ए = 2" पर कॉल करना था, तो यह शून्य वापस आ जाएगा (ऐसी कोई पंक्ति मौजूद नहीं है)। संभवतः आप डेटा रीडर के साथ एक ही परिणाम प्राप्त कर सकते हैं लेकिन मैं सुविधा की सराहना करता हूं। – fostandy
दिलचस्प। डीबी एक्सेस के लिए ओआरएम का उपयोग करते समय, मैं अक्सर अपने कोड में ExecuteScalar का स्पष्ट रूप से उपयोग नहीं करता हूं। मैं आमतौर पर पूर्ण इकाई वस्तुओं को पुनर्प्राप्त करना और उनके मूल्यों को इस तरह देख रहा हूं। तो अगर इकाई स्वयं शून्य है तो यह एक बात है, और यदि मूल्य शून्य है, तो यह कुछ और है। इसे करने के बस अलग तरीके।मैं स्वीकार करता हूं कि यदि आपको केवल एक ही मूल्य की आवश्यकता है तो ExecuteScalar अधिक कुशल है। – jeremcc