2015-01-31 8 views
5

एक्सेल करने के लिए निर्यात करने के विचारों की आवश्यकता है अभी मेरा कोड सभी कॉलम निर्यात करता है जो यह एक्सेल फ़ाइल में क्वेरी करता है। निष्पादित SQL आदेश संग्रहीत प्रक्रियाओं में हैं। मैं यह निर्धारित करने में सक्षम होना चाहता हूं कि SQL डेटा से कौन से कॉलम निर्यात करना चाहते हैं।सी # - एसक्यूएल निष्पादित करने और

एक विधि जिसे मैं सोच रहा हूं, वह होगा कि उपयोगकर्ता जो चाहते हैं उसे चुनने में सक्षम हो और संग्रहीत प्रक्रिया में कमांड का उपयोग करने के बजाय उन्हें SQL क्वेरी में जोड़ दें।

मैंने चयन क्षेत्र के अंदर संग्रहीत प्रक्रियाओं में पैरामीटर डालने का भी प्रयास किया है, यह सोचकर कि चुनिंदा क्षेत्र में पैरामीटर रखना आसान होगा, लेकिन अब तक जो मैं समझता हूं उससे यह है कि एसक्यूएल की संभावना के कारण इसकी अनुमति नहीं है इंजेक्शन।

मैंने SQL डेटा को पकड़ने के लिए डेटासेट्स और डेटाटेबल्स का उपयोग करने वाले लोगों के कुछ उदाहरण देखे हैं, लेकिन फिर इसे एक्सेल करने के लिए निर्यात करें। लेकिन अगर आप इसका इस्तेमाल करते हैं तो उस कॉलम को लिखने से पहले आपको सशर्त बयान की एक गुच्छा की आवश्यकता नहीं होगी?

क्या कोई और तरीका है? कोड नीचे दिखाया गया है कि मैं अब तक क्या कर रहा हूं।

private SqlDataSource GetDataSource(string FruitType) 
{ 

    SqlDataSource tempDataSource = new SqlDataSource(); 
    tempDataSource.ConnectionString = ConfigurationManager.ConnectionStrings["ServerConnectionString"].ToString(); 
    tempDataSource.SelectCommandType = SqlDataSourceCommandType.StoredProcedure; 
    switch (ReportType) 
    { 
     case "Oranges": 
      tempDataSource.SelectCommand = "getOrange";           
      break; 
     case "Apples": 
      tempDataSource.SelectCommand = "getApples";     
      break; 
     case "Pineapples": 
      tempDataSource.SelectCommand = "getPineapples"; 
      break; 
     case "Watermelons":     
      tempDataSource.SelectCommand = "getWatermelons";     
      break; 
     case "GrapeFruit":     
      tempDataSource.SelectCommand = "getGrapeFruit";     
      break; 
    } 

    tempDataSource.DataBind(); 
    return tempDataSource; 
} 
protected void btnSaveData(object sender, EventArgs e) 
{ 
    string attachment = "attachment; filename="; 
    attachment += "Fruit Data"; 
    attachment += ".xls"; 

    Response.ClearContent(); 
    Response.Charset = ""; 
    Response.AddHeader("content-disposition", attachment); 
    Response.ContentType = "application/ms-excel"; 

    StringWriter sw = new StringWriter(); 
    HtmlTextWriter htw = new HtmlTextWriter(sw); 

    GridView gvTemp = new GridView(); 
    gvTemp.Attributes["runat"] = "server"; 

    SqlDataSource ds = GetDataSource(FruitType); 
    gvTemp.DataSource = ds; 
    gvTemp.DataBind(); 
    gvTemp.RenderControl(htw); 
    Page.Controls.Add(gvTemp); 
    Response.Write(sw.ToString()); 
    Response.End(); 

} 

उत्तर

0

आप आसानी से जो कॉलम आप संग्रहीत प्रक्रिया से प्राप्त करना चाहते हैं निर्दिष्ट करने के लिए अस्थायी तालिकाओं का उपयोग कर सकते हैं:

CREATE PROCEDURE sp_GetDiffDataExample 
     @columnsStatement NVARCHAR(MAX) -- Needed columns 
AS 
BEGIN 
    DECLARE @query NVARCHAR(MAX) 
    SET @query = N'SELECT ' + @columnsStatement + N' INTO ##TempTable FROM dbo.TestTable' 
    EXEC sp_executeSql @query 
    SELECT * FROM ##TempTable 
    DROP TABLE ##TempTable 
END 

आशा इस मदद करता है।

+0

कुछ प्रश्न लेकिन जब मैं कॉलम पैरामीटर में अपने चर डालता हूं तो क्या उन्हें पहले से एसक्यूएल प्रारूप में होना चाहिए? जैसे कि 'col name1, col name2' इसके अलावा, तालिका तालिका से कॉलम का चयन करने के बाद आपको तालिका तालिका से सभी का चयन करने के बाद इसे किसी अन्य तालिका में क्यों डालना होगा? क्या यह अनावश्यक नहीं है? – user2677821

+0

हां, कॉलम पैरामीटर एसक्यूएल प्रारूप में होना चाहिए। यह सिर्फ उदाहरण है, इसलिए आप अपने खुद के पैरामीटर लिख सकते हैं और उसी तरह से डेटा का चयन कर सकते हैं। जहां तक ​​मुझे पता है कि मैनुअल कोडिंग के बिना प्रक्रिया से अलग कॉलम परिणाम प्राप्त करने के लिए केवल एक विकल्प है। यदि आप अपने उपयोगकर्ता को वांछनीय कॉलम चुनना चाहते हैं तो यह सबसे आसान उदाहरण माना जाता है। – dyatchenko

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