2009-04-07 19 views
6

यह वह जगह है सी # में, विजुअल स्टूडियो 2008, क्रिस्टल की रिपोर्ट है कि VS2008क्रिस्टल की रिपोर्ट - डेटाबेस कनेक्शन

मैं एक क्रिस्टल रिपोर्ट दर्शक रूप है कि एक DLL में रहता है मिल गया है के साथ आया था बंद कर दें। डीएलएल क्रिस्टल रिपोर्ट (रिपोर्ट फ़ाइल नाम के आधार पर) लोड करने और फॉर्म पर रिपोर्ट प्रदर्शित करने के लिए ज़िम्मेदार है।

जब मैं क्रिस्टल रिपोर्ट के साथ किया हूँ, मैं फोन भरी हुई reportdocument वस्तु पर निपटाने। हालांकि, डेटाबेस कनेक्शन बनी हुई है।

क्रिस्टल का पता लगाने के लिए एक ही डेटाबेस के लिए अन्य कनेक्शन (अपने मुख्य अनुप्रयोग से) देखते हैं कि लगता है, और उसके कनेक्शन खुला रहता है। मुख्य अनुप्रयोग डेटाबेस कनेक्शन बंद होने पर क्रिस्टल कनेक्शन बंद हो जाता है।

वहाँ मुख्य आवेदन डेटाबेस कनेक्शन बंद करने के साथ अपने कनेक्शन बंद करने के लिए, क्रिस्टल के लिए मजबूर करने कोई तरीका है?

उत्तर

0

मैं क्रिस्टल रिपोर्ट के साथ भी परिचित नहीं हूँ, लेकिन वहाँ कई वस्तुओं एक विरासत श्रृंखला है कि IDisposable इंटरफ़ेस शामिल की वजह से जो एक बेकार निपटान() विधि होती है। यदि आप सर्वर पर कोई प्रदर्शन समस्या नहीं देख रहे हैं, तो इसके बारे में चिंता न करें। जब जी तैयार हो तो जीसी ग्राहकों पर कनेक्शन का ख्याल रखेगा। आपको जीसी से ज्यादा चालाक होने की कोशिश नहीं करनी चाहिए, आप केवल खुद को अधिक सिरदर्द देंगे।

और, हमेशा फोन निपटान() (या का उपयोग कर {}) जब यह उपलब्ध है।

+0

यह वास्तव में डेटाबेस कनेक्शन के बारे में है। मुख्य एप्लिकेशन में डेटाबेस को पुनर्स्थापित और बैकअप करने की कार्यक्षमता है। क्रिस्टल डीबी कनेक्शन इसे रोकता है। मुझे Google पर घबराहट हुई है, और रिपोर्ट को निपटाने से कनेक्शन बंद हो जाता है, लेकिन केवल तभी क्रिस्टल एकमात्र चीज जुड़ा हुआ है। – user87945

+0

मुझे लगता है कि आप MSSQL का उपयोग कर रहे हैं, सही? क्यों निर्मित बैकअप/पुनर्स्थापित का उपयोग नहीं करते हैं? – Ariel

+0

क्योंकि उत्पाद गैर-तकनीकी लोगों द्वारा उपयोग किए जाने के लिए डिज़ाइन किया गया है। बैकअप/पुनर्स्थापन कहने वाले दो मेनू आइटम होने के बाद समझना बहुत आसान है, फिर एसक्यूएल प्रबंधन स्टूडियो में जाएं, ऐसे उपयोगकर्ता के रूप में लॉग इन करें, जिनके पास निजी हैं आदि – user87945

1

आप डेटाबेस कैसे कनेक्ट कर रहे हैं, प्रमाणीकरण की स्थापना के माध्यम से कार्यावधि में अपने स्वयं के कनेक्शन बनाने के द्वारा या आप क्रिस्टल रिपोर्ट में संग्रहीत कनेक्शन के माध्यम से कनेक्शन कर दे रहे हैं? यदि आप किसी भी तरह से, आकार या फॉर्म में अपना स्वयं का कनेक्शन कर रहे हैं, तो आपको कनेक्शन को मैन्युअल रूप से बंद करना होगा और रिपोर्ट का निपटान करने से पहले निपटान को कॉल करना होगा।

यह काफी संभव है कि यह एक स्मृति रिसाव है। मैंने पहले इन अनुभव किया है। क्रिस्टल रिपोर्ट्स के साथ मेमोरी रिसाव मुद्दा भी है और उनके मंच पर काफी कुछ बात की गई है, लेकिन कुछ साल पहले जब मैं इसका उपयोग कर रहा था तो कोई फिक्स जारी नहीं किया गया था। मैंने अन्य विकल्पों के लिए क्रिस्टल को हटा दिया।

0

मुझे एक ही समस्या थी, सिवाय इसके कि मैं Sybase का उपयोग कर रहा हूं। थोड़ी देर पहले जब मैंने एक त्रुटि देखी तो कनेक्शन को निपटाने के लिए मैंने जो कोड लिखा था, उसे पोस्ट कर रहा था (और यह काम नहीं किया)! मैंने त्रुटि तय की, और, मेरी उंगलियों को पार किया, अब यह काम करता प्रतीत होता है। मैंने लगभग 100 रिपोर्ट खोली हैं जहां मैं 10 पहले नहीं खोल सका। यदि आप इसे आजमाते हैं, तो कृपया मुझे बताएं कि यह आपके लिए काम करता है या नहीं।

var rd = (ReportDocument)crystalReportViewer1.ReportSource; 
foreach (Table table in rd.Database.Tables) 
    table.Dispose(); 
rd.Database.Dispose(); 
rd.Close(); 
rd.Dispose(); 
GC.Collect(); 

मार्क

0

मार्क्स कोड कुछ हद तक स्थिति को राहत देने के हालांकि यह थोड़ा पीछे की ओर है लगता है:

यहाँ मैं क्या कर रहा हूं सही इससे पहले कि मैं खिड़की है कि क्रिस्टल रिपोर्टें दर्शक शामिल बंद है , कुछ होना चाहिए:

ReportDocument rd = (ReportDocument) viewer.ReportSource; 
foreach (Table table in rd.Database.Tables) 
    table.Dispose(); 
viewer.ReportSource = null; 
rd.Database.Dispose(); 
rd.Close(); 
rd.Dispose(); 
rd = (ReportDocument) viewer.ReportSource; 
GC.Collect(); 

यह मेरे लिए रिसाव पूरी तरह से प्लग नहीं करता है लेकिन निश्चित रूप से मदद करता है।

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