2009-08-17 11 views
11

एसक्यूएल सर्वर 2008 में एक varbinary (MAX) फ़ील्ड (फ़ाइलस्ट्रीम का उपयोग नहीं कर रहे) से बाइनरी डेटा के केवल हिस्से को पढ़ने का सबसे प्रभावी तरीका क्या है?एसक्यूएल सर्वर वर्बिनरी (अधिकतम): varbinary फ़ील्ड से बाइट्स का सबसेट चुनें

कॉलम में डेटा लिखते समय VarBinary.Write() फ़ंक्शन टी-एसक्यूएल में उपलब्ध है, जिससे बाइट्स को फ़ील्ड को क्रमशः लिखा जा सकता है, लेकिन डेटा पढ़ने के लिए एक समान फ़ंक्शन उपलब्ध नहीं होता है।

मुझे डेटा रीडर.गेटबाइट्स() विधि में पता है .Net जो केवल आपके द्वारा पूछे जाने वाले बाइट्स का चयन करेगा, लेकिन क्या इसमें इसके साथ एक प्रदर्शन ओवरहेड है? यानी sqlserver में चयन डेटाबेस में सभी बाइट्स को पढ़ेगा, और फिर उनसे अनुरोध किए गए बाइट्स का सबसेट लेने के लिए GetBytes() विधि इन सभी बाइट्स को दें?

किसी भी मदद के लिए धन्यवाद।

उत्तर

17

आप SUBSTRING का उपयोग करते हैं। यह सर्वर पर आपके varbinary डेटा से एक स्निपेट पढ़ता है, और केवल क्लाइंट को स्निपेट देता है।

+4

+1 दिलचस्प! मुझे नहीं पता था कि मैं एक वर्बिनरी कॉलम पर सबस्ट्रिंग का उपयोग कर सकता हूं! :-) –

+1

बहुत उपयोगी, धन्यवाद। – gmn

+0

अद्भुत। किसने यह सोचा होगा? कम substring की शक्ति –

1

DataReader.GetBytes() का उपयोग ओवरहेड के बिना संभव है, afaik। लेकिन आपको CommandBehavior.SequentialAccess विकल्प के साथ ExecuteReader() पर कॉल करना होगा।

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