sql server - Static ADO recordset returns RecordCount -1 when using common table expressions -
के अनुसार, रिकॉर्डकाउंट संपत्ति अग्रेषित-केवल कर्सर के लिए -1 लौटाएगी; एक स्थिर या कुंजीसेट कर्सर के लिए वास्तविक गणना ; और या तो -1 या एक गतिशील कर्सर के लिए वास्तविक गणना, डेटा स्रोत पर निर्भर करता है। हालांकि, इस जाहिरा तौर पर झूठ जब क्या यह एक ज्ञात समस्या है? मुझे पता है कि मैं इसके आसपास काम कर सकता हूँ (डिफ़ॉल्ट) सर्वर-साइड कर्सर के बजाय क्लाइंट-साइड का उपयोग करके मुद्दा उठाता है, लेकिन मैं ऐसा नहीं करना चाहता कि हमारे विरासत कोड में प्रतिगमन शुरू करने से बचने के लिए। दूसरे मामले में, एडीओ एक स्थिर कर्सर नहीं बनाते जाहिर है, ओएलई डीबी प्रदाता सीटीई के साथ सर्वर साइड स्टेटिक कर्सर का समर्थन नहीं करता और कर्सर प्रकार को इसे खोजने के लिए क्रेडिट जाता है। Recordset.RecordCount का उपयोग करते समय पंक्तियों की वास्तविक संख्या वापस करना माना जाता है स्थिर रिकॉर्डसेट (जोर मेरा):
उपयोग कर रहा है SQLOLEDB प्रदाता और एक एसक्यूएल बयान है कि एक आम तालिका अभिव्यक्ति में शामिल हैं:
कॉन्स्ट sql1 = कॉन्स्ट sql2 = मंद cn के रूप में नया "mycte के रूप में MyTable से (MyTable से myField चयन) का चयन करें myField के साथ" "MyTable से myField का चयन करें" ADODB.Connection cn.Open "प्रदाता = SQLOLEDB; सर्वर = MYSERVER; प्रारंभिक सूची = myDatabase; एकीकृत सुरक्षा = SSPI" मंद रु न्यू ADODB.Recordset rs.CursorLocation = adUseServer rs.Open sql1, cn, adOpenStatic, adLockReadOnly, adCmdText डीबग के रूप में .Print rs.RecordCount 'पैदावार 156' rs.Close rs.Open sql2, cn, adOpenStatic, adLockReadOnly, adCmdText Debug.Print rs.RecordCount 'पैदावार -1; 156 'rs बंद cn.Close
adOpenForwardOnly में बदल देता है। फॉरवर्ड-केवल कर्सर हमेशा
RecordCount के रूप में -1 लौटाते हैं।
Comments
Post a Comment