पर पास करना चाहिए, मेरे पास एक SqlDataReader है और SqlDataReader.GetBytes() विधि का उपयोग करके इसे एक varbinary (अधिकतम) कॉलम पढ़ने की आवश्यकता है। यह विधि बाइट सरणी को पॉप्युलेट करती है और इसलिए यह जानना आवश्यक है कि डेटा की लंबाई कितनी है।मुझे 'लंबाई' पैरामीटर को SqlDataReader.GetBytes()
यह वह जगह है जहां मैं भ्रमित हो जाता हूं .. स्पष्ट रूप से मैं इस पंक्ति/कॉलम में डेटाबेस से लौटाया गया सभी डेटा पढ़ना चाहता हूं, तो मुझे 'लंबाई' पैरामीटर कब पास करना चाहिए?
जहाँ तक मैं देख सकता हूं, SqlDataReader यह जानने के लिए कोई तरीका प्रदान नहीं करता है कि डेटा कितनी लंबाई उपलब्ध है, इसलिए यह विधि मेरे लिए काफी अजीब लगती है।
मैं सिर्फ int.MaxValue को पास करने और इस मुद्दे को भूलने के लिए प्रेरित हूं लेकिन इसके बारे में कुछ मेरे साथ सही नहीं बैठता है।
मुझे लगता है कि मैं बजाय कॉल कर सकते हैं
byte[] value = (byte[])dataReader["columnName"];
जानकारी है .. और यह पूरी तरह से आंतरिक रूप से लंबाई मुद्दे की देखभाल करने लगता है। हालांकि मैं जटिल कोड जनरेशन टेम्पलेट्स के एक सेट के साथ काम कर रहा हूं जो SqlDataReader.GetXXXX() विधियों के आसपास बनाया गया है। तो मैं GetBytes का उपयोग करने में बंधे हूं और इसके उचित उपयोग को समझने की आवश्यकता है।
एसक्यूएल में एक varbinary में लंबाई के लिए पूछने के तरीके हैं - आपको इसे SQL में रखना होगा: http://msdn.microsoft.com/en-us/library/ms173486.aspx - DATALENGTH। तालिका से फ़ील्ड, डेटालेथेंथ (फ़ील्ड) का चयन करें और आप लंबाई देख सकते हैं। – TomTom
धन्यवाद, मैंने SQL में DATALENGTH का उपयोग करने पर विचार किया लेकिन यह वास्तव में एक स्वीकार्य समाधान नहीं है। जैसा कि आप संभवतः डेटा एक्सेस लेयर के सभी रूपों का अनुमान लगा सकते हैं, इसलिए बुनियादी कार्यक्षमता का समर्थन करने के लिए हाथों से लिखित संग्रहित प्रक्रियाओं में इस तरह के सम्मेलनों को मजबूर करना बहुत अच्छा नहीं है। – Martyn
@ मार्टिन जबकि मैं यहां हूं ... यह सुनिश्चित करने के लिए पुस्तकालय * समर्पित * हैं कि आपको कष्टप्रद ADO.NET कोड लिखने की आवश्यकता नहीं है ... "डैपर" (मेरी भारी पक्षपातपूर्ण राय में) छिपाने के लिए उत्कृष्ट है इन चिंताओं, जबकि बहुत हल्के वजन और घुसपैठ नहीं है। –