2013-06-14 8 views
5

में बड़े डेटासेट के मामले में एक्सेल डाउनलोड प्रक्रिया पृष्ठ मर जाती है, मैंने एक एप्लीकेशन विकसित किया है जहां मुझे डेटाबेस से डेटा मिल रहा है, इसे इंफ्राजिस्टिक्स ग्रिड में बाध्य कर रहा है और फिर एक्सेल को अपनी निर्यात उपयोगिता का उपयोग करके डाउनलोड कर रहा है।एएसपी.NET

इस दृष्टिकोण के साथ एक समस्या है जब सेट डेटा बड़ी है है (20000 रिकॉर्ड या अधिक कहते हैं), यह लंबे समय कार्रवाई करने के लिए और डाउनलोड ले जाएगा, और आमतौर पर यह पेज मर जाते हैं और करने के लिए रिक्त पृष्ठ दिखाएंगे उपयोगकर्ता।

क्या इस मुद्दे को संभालने और एक्सेल में उचित सुधार करने के लिए कोई बेहतर तरीका है प्रक्रिया डाउनलोड करें?

public void LoadExcelPostingData() 
     { 
      try 
      { 
       query = "Some complex query here with up to 10 columns"; 
       dt.Clear(); 
       dt = new DataTable(); 
       db2.GetDataTable(query, CommandType.Text, ref dt); 

       grdJurdata.DataSource = dt; 
       grdJurdata.DataBind(); 

       ExportToExcel(); 
      } 
      catch (Exception ex) 
      { 
       lblresult.Text = "Grd Err : " + ex.Message; 
      } 

     } 
    private void ExportToExcel() 
     { 
      try 
      { 
       // Infragistics built in excel export utility 
       UltraWebGridExcelExporter2.Export(grdJurdata);    
      } 
      catch (Exception ex) 
      { } 

     } 
+0

बस बड़ी एक्सेल फ़ाइलों को डाउनलोड करने के लिए आपको एक अच्छी तंत्र की आवश्यकता है। सही? – Freak

+0

अपना कोड भी – Freak

+0

@freak साझा करें, मैं अच्छी व्यवस्था के लिए पूछ रहा/खोज रहा हूं !!! –

उत्तर

2

फ़ाइल डाउनलोड के बारे में और अधिक समय समाप्ति अवधि जोड़ने की जरूरत है माइक्रोसॉफ्ट के MSDN एक detailed explanation

    प्रदान
  • प्रतिक्रिया प्राप्त करें
  • प्रतिक्रिया के साथ, सामग्री प्रकार को "एप्लिकेशन/ओसीटीईटी-स्ट्रीम" पर सेट करें (इसका मतलब है कि फ़ाइल खोलने के लिए कोई एप्लिकेशन नहीं है)।
  • शीर्षलेख को "सामग्री-विस्थापन", "अनुलग्नक; फ़ाइल नाम = \" "+ +" \ "" पर सेट करें।
  • प्रतिक्रिया में फ़ाइल सामग्री लिखें।
  • प्रतिक्रिया बंद करें।

यह भी ध्यान है कि Ajax अनुरोध क्योंकि फ़ाइल स्थानांतरण के लिए फ़ाइल को डाउनलोड करने का उपयोग कभी नहीं में रखने के लिए, यह यहाँ पूरा PostBack अनुरोध
जरूरत MSDN पर दिए गए नमूना कोड है

<% 
try 
{ 
    System.String filename = "myFile.txt"; 

    // set the http content type to "APPLICATION/OCTET-STREAM 
    Response.ContentType = "APPLICATION/OCTET-STREAM"; 

    // initialize the http content-disposition header to 
    // indicate a file attachment with the default filename 
    // "myFile.txt" 
    System.String disHeader = "Attachment; Filename=\"" + filename + 
     "\""; 
    Response.AppendHeader("Content-Disposition", disHeader); 

    // transfer the file byte-by-byte to the response object 
    System.IO.FileInfo fileToDownload = new 
     System.IO.FileInfo("C:\\downloadJSP\\DownloadConv\\myFile.txt"); 
    Response.Flush(); 
    Response.WriteFile(fileToDownload.FullName);} 
catch (System.Exception e) 
// file IO errors 
{ 
    SupportClass.WriteStackTrace(e, Console.Error); 
} 
%> 



मैं यह भी सुझाव है आप this good discussion

संपादित करें # 1: अपने मामले के लिए एक और समाधान अल्ट्रावेबग्रीडएक्ससेलएक्सपोर्ट को पकड़ने के लिए एक नया पृष्ठ बनाएं er, और अपने मुख्य पृष्ठ में, उस नए पृष्ठ को पकड़ने के लिए एक आईफ्रेम टैग बनाएं। आईफ्रेम पोस्टबैक दें। और अपने इन्फ्रास्ट्रिक्स संस्करण को नवीनतम में अपग्रेड करें।

+0

क्या आपको लगता है कि यह बड़े डेटा सेट के मामले में ठीक व्यवहार करेगा। अगर हम सीधे प्रतिक्रिया प्राप्त करने का प्रयास करते हैं और इसे एक्सेल में निर्यात करने का प्रयास करते हैं तो यह स्मृति IO अपवाद का कारण बन सकता है। क्या आप इसे समझा देना चाहते हैं? –

+0

हां यह होना चाहिए। आपको इस कोड – Freak

+0

ठीक से, इस प्रयास के साथ प्रयास करना चाहिए। मैं इस दृष्टिकोण की कोशिश करूंगा। –

0

सबसे पहले आप कोड आप कैसे लिखा था पर फिर से विचार करने की जरूरत है:

कोड नीचे कुछ की तरह है। आपको कोडबेस को दोबारा सुधारने या सुधारने की आवश्यकता है।

अगर आप अनुरोध का समय समाप्त वृद्धि करना चाहते हैं, तो आप क्या कर सकते हैं इस आप web.config

<system.web> 
     <httpruntime executionTimeout="4800"/> //or higher values 
    </system.web> 
+0

कोड है प्रश्न विवरण में अद्यतन किया गया। यदि हम निष्पादन समय बढ़ाते हैं तो यह केवल प्रतिक्रिया प्राप्त करने की क्षमता बढ़ाएगा, लेकिन यह प्रदर्शन समस्या को ठीक नहीं करेगा। –