2015-01-31 2 views
5

Im Augenblick exportiert mein Code alle Spalten, die es die Abfrage in eine Excel-Datei ausführt. Die SQL-Befehle, die ausgeführt werden, befinden sich in gespeicherten Prozeduren. Ich möchte die Möglichkeit haben, die Spalten aus den SQL-Daten, die ich exportieren möchte, angeben zu können.C# - Brauchen Sie Ideen zum Ausführen von SQL und Exportieren zu Excel

Eine Methode, die ich denke, wäre, den Benutzer in der Lage zu sein, auszuwählen, was sie wollen und sie in eine SQL-Abfrage verketten, anstatt die Befehle in der gespeicherten Prozedur zu verwenden.

Ich habe auch versucht, Parameter in die gespeicherten Prozeduren innerhalb des Auswahlbereichs zu setzen, in der Annahme, dass es einfach wäre, Parameter im Auswahlfeld zu haben, aber von dem, was ich bisher verstehe, ist es wegen der Möglichkeit von SQL nicht erlaubt Injektionen.

Ich habe einige Beispiele von Leuten gesehen, die DataSets und DataTables verwenden, um die SQL-Daten zu speichern, aber dann alles nach Excel exportieren. Aber wenn Sie es so verwenden, brauchen Sie nicht eine Reihe von bedingten Anweisungen, die Sie überprüfen müssen, bevor Sie diese Spalte schreiben.

Gibt es noch andere Methoden? Code unten veröffentlicht nur um zu zeigen, was ich bisher mache.

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(); 

} 

Antwort

0

Sie können ganz einfach temporäre Tabellen verwenden, um festzulegen, welche Spalten erwarten Sie von gespeicherten Prozedur erhalten möchten:

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 

Hoffnung, das hilft.

+0

Wenige Fragen, aber wenn ich meine Variablen in den Spalten Parameter setzen müssen sie im SQL-Format bereits sein? Wie 'col name1, col name2' Warum müssen Sie es in eine andere Tabelle einfügen, nachdem Sie die Spalten aus der Tabelle ausgewählt haben, nur um alle aus der Testtabelle auszuwählen? Ist das nicht irgendwie überflüssig? – user2677821

+0

Ja, Spaltenparameter müssen im SQL-Format sein. Dies ist nur ein Beispiel, damit Sie Ihre eigenen Parameter schreiben und Daten auf die gleiche Weise auswählen können. Soweit ich weiß, gibt es nur eine Option, um verschiedene Spalten aus dem Verfahren ohne manuelle Codierung zu erhalten. Wenn Sie wünschen, dass Ihr Benutzer wünschenswerte Spalten auswählt, ist dies vermutlich das einfachste Beispiel. – dyatchenko

Verwandte Themen