PRB: SQL से डेटा पुनर्प्राप्त करते समय 80020009 त्रुटि


लक्षण


निम्न त्रुटि तब होती है जब "पाठ" एक सक्रिय सर्वर पृष्ठ (ASP) फ़ाइल में कोई अभिलेख सेट तक पहुँचने या किसी SQL तालिका से डेटा "ब्लॉब" प्रकार:
Microsoft OLE DB प्रदाता '80020009' ODBC ड्राइवर त्रुटि के लिए

कारण


निम्न स्थिति त्रुटि उत्पन्न होने के कारण हो सकता है:

एक क्रम में फ़ील्ड की अन्य प्रकार पिछले पाठ/ब्लॉब फ़ील्ड चयनित हैं।

समाधान


जब Microsoft SQL Server से ब्लॉब फ़ील्ड के साथ डील कर रही हैं, तो आप उन्हें resultset में गैर-ब्लॉब स्तंभ के दाईं ओर रखनी होती हैं। यदि दो ब्लॉब स्तंभ अंतिम दो स्तंभों के रूप में अपने resultset में, आपके पास सुरक्षित किया जा करने के लिए, आप बाएँ-से-दाएँ क्रम में स्तंभों को पढ़ें चाहिए इसलिए पहले और उसके बाद दूसरी पढ़ें। उन्हें उल्टे क्रम में नहीं पढ़ा है।

है करने के लिए फ़ील् ड चयन के सही क्रम बनाएँ नया ASP पृष्ठ में कोई दृश्य InterDev प्रोजेक्ट और चिपकाएँ रिक्त ASP पृष्ठ में निम्नलिखित कोड। आपका SQL सर्वर से कनेक्ट करने के लिए कनेक्शन स्ट्रिंग को संशोधित करें:



नोट आपको उपयोगकर्ता नाम परिवर्तित करना आवश्यक = < > उपयोगकर्ता नाम और PWD इससे पहले कि आप इस कोड को चलाने के लिए सही मान < strong पासवर्ड > =। सुनिश्चित करें कि उपयोगकर्ता ID डेटाबेस पर यह कार्रवाई करने के लिए उचित अनुमति है।
   <%@ Language=VBScript %>
<HTML>
<BODY bgcolor=white>
<%
Set cn = Server.CreateObject("ADODB.Connection")
Set rs = Server.CreateObject("ADODB.Recordset")

'Open the connection.
cn.Open "dsn=yoursystemdsn;Username=<username>;PWD=<strong password>;database=pubs;"

'Open the recordset.

'Notice that the Blob field, pr_info, is last in the field order.

rs.Open "select pub_id, pr_info from pub_info", cn

While Not rs.EOF

Response.Write "<P>PR Info:<P>" & rs("pr_info")
Response.Write "<P>That was the PR Info for PubID " &
rs("pub_id")
rs.MoveNext
Wend
%>
</BODY>
</HTML>

स्थिति


यह व्यवहार डिज़ाइन के अनुसार है। हालांकि, यह Mdac 2.1sp2 का उपयोग करते समय या बाद में 3.7 ड्रायवर के साथ या बाद में SQL सर्वर के लिए नहीं होती है।

यदि आप Microsoft डेटा एक्सेस घटकों का नवीनतम संस्करण को निम्न Microsoft वेब साइट से डाउनलोड कर सकते हैं:

अधिक जानकारी


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

जब आप ब्लॉब स्तंभ शामिल हैं, तो स्तंभ की लंबाई लगभग 2 गीगाबाइट्स हो सकते हैं और ड्राइवर प्राय: निश्चित रूप से कितनी बड़ी ब्लॉब तक प्राप्त है निर्धारित नहीं कर सकता, क्योंकि डेटा पहुँच लायब्रेरियों सामान्यतया उन स्तंभों बाइंड न करें। साथ ही, डेटा पहुँच लायब्रेरियों सामान्यतया ब्लॉब डेटा कैश क्योंकि यह स्मृति की बड़ी मात्रा का उपभोग कर सकते हैं, और यह दोनों में डेटा पहुँच लाइब्रेरी और अपना अनुप्रयोग कैशिंग असक्षम है से बचें। यदि डेटा पहुँच ड्राइवर ब्लॉब स्तंभ की सामग्री पर वापस जाने के लिए अनुरोध किया गया है, विशेष रूप से जो अनुरोध की गई स्तंभ पढ़ सकते हैं, पहले इसे क्रमिक डेटा प्रवाह प्राप्त करना होगा क्योंकि अनुरोधित ब्लॉब स्तंभ, पहले गैर-बाउंड स्तंभ अस्वीकृत कर देता है। इसलिए, जो डेटा प्राप्त करने के तरीके से मेल खाने के बाद अपने resultset बाएँ-से-दाएँ से पठन करना अधिक कुशल है।

ध्यान दें कि यह व्यवहार SQL सर्वर का वर्णन करता है। Oracle और अन्य ग्राहक/सर्वर DBMSs एक ही चीज़ क्या हो सकती है, लेकिन यह आवश्यक नहीं है।

शायद कोई पाठ स्तंभ के उपयोग से बचने के लिए एक बेहतर विकल्प है। क्योंकि SQL Server उतनी 2 K खंड में स्थान, पाठ की लंबाई बहुत छोटा है, तो पाठ स्तंभों का उपयोग करके असक्षम संग्रहण का उपयोग में हो सकता है। बैकअप समय भी प्रभावित है क्योंकि यह हस्तांतरण लॉग डम्प करने के लिए अधिक समय लेता है। प्राय: यह आपकी वर्तमान तालिका, खंड संख्या स्तंभ और varchar (255) स्तंभ के PK है जो किसी अन्य तालिका बनाने के लिए बेहतर है। पाठ खंड की आवश्यकता, और नई टेबल में खंड हैं के रूप में कई के रूप में पंक्तियाँ सम्मिलित करें के रूप में कई 255 वर्ण में विभाजित करें। यह आमतौर पर अतिरिक्त मूल्य के बराबर समय बाद संग्रह की अधिक कुशल उपयोग करें और बैकअप काफी तीव्र गति से जाना कोडिंग है।