2016-09-14 2 views
-3

я застрял в логике, где я следующий ниже требования:Экспорт и запись CSV в определенном месте

1- Сформировать несколько файлов CSV.

2- Экспорт CSV-файлов в определенное место.

3- ZIP все файлы с этого места.

Раньше я задал вопрос, связанный с созданием 2 файлов на одной кнопке, нажав here. Но позже я обнаружил, что это не можно получить два файла из одного ответа в ASP.NET. Поэтому я решил Zip мои файлы и загрузить на компьютер клиента. Но я генерирую свои CSV-файлы при нажатии кнопки, и у меня нет определенного местоположения. Поэтому я решил сначала сохранить файл CSV на , а затем ZIP-файлы.

Ниже мой код, чтобы сгенерировать свой CSV файл:

using System.Data; 
    using System.Data.SqlClient; 
    using System.Text; 
    using System.IO; 
    using System; 
    using System.Configuration; 
    using System.IO.Packaging; 
    using System.Web; 

    namespace ExportToCsv 
    { 
    public partial class WebForm1 : System.Web.UI.Page 
    { 
    //Build the CSV file data as a Comma separated string. 
    string csvHeader = string.Empty; 
    //Build the CSV file data as a Comma separated string. 
    string csvDetails = string.Empty; 

    protected void Page_Load(object sender, EventArgs e) 
    { 

    } 

    protected void ExportCSV(object sender, EventArgs e) 
    { 
    string constr = ConfigurationManager.ConnectionStrings["ConStr"].ConnectionString; 
    using (SqlConnection con = new SqlConnection(constr)) 
    { 
    using (SqlCommand cmd = new SqlCommand("select * from mytable-1") 
    { 
    using (SqlDataAdapter sda = new SqlDataAdapter()) 
    { 
    cmd.Connection = con; 
    sda.SelectCommand = cmd; 
    using (DataTable dt = new DataTable()) 
    { 
    sda.Fill(dt); 


    //foreach (DataRow rows in dt.Rows) 
    //{ 
    foreach (DataColumn column in dt.Columns) 
    { 
    //Add the Header row for CSV file. 
    csvHeader += column.ColumnName + ' '; 
    } 


    //Add new line. 
    csvHeader += "\r\n"; 

    foreach (DataRow row in dt.Rows) 
    { 
    foreach (DataColumn column in dt.Columns) 
    { 
    //Add the Data rows. 
    csvHeader += row[column.ColumnName].ToString().Replace(",", ";") + ' '; 
    } 

    //Add new line. 
    csvHeader += "\r\n"; 
    } 
    //} 

    Response.Clear(); 
    Response.Buffer = true; 
    Response.AddHeader("content-disposition", "attachment;filename=HeaderSection.txt"); 
    Response.Charset = ""; 
    Response.ContentType = "application/text"; 
    Response.Output.Write(csvHeader); 
    } 
    } 
    } 

    using (SqlCommand cmd = new SqlCommand("select * from mytable-2") 
    { 
    using (SqlDataAdapter sda = new SqlDataAdapter()) 
    { 
    cmd.Connection = con; 
    sda.SelectCommand = cmd; 
    using (DataTable dt = new DataTable()) 
    { 
    sda.Fill(dt); 


    //foreach (DataRow rows in dt.Rows) 
    //{ 
    foreach (DataColumn column in dt.Columns) 
    { 
    //Add the Header row for CSV file. 
    csvDetails += column.ColumnName + ' '; 
    } 


    //Add new line. 
    csvDetails += "\r\n"; 

    foreach (DataRow row in dt.Rows) 
    { 
    foreach (DataColumn column in dt.Columns) 
    { 
    //Add the Data rows. 
    csvDetails += row[column.ColumnName].ToString().Replace(",", ";") + ' '; 
    } 

    //Add new line. 
    csvDetails += "\r\n"; 
    } 
    //} 

    // Download the CSV file. 
    Response.Clear(); 
    Response.Buffer = true; 
    Response.AddHeader("content-disposition", "attachment;filename=DetailSection.txt"); 
    Response.Charset = ""; 
    Response.ContentType = "application/text"; 
    Response.Output.Write(csvDetails); 
    Response.Flush(); 
    Response.End(); 
    } 
    } 
    } 
    } 

    } 
    } 
    } 

Я могу достигнуть моего 1-го требования, но не в состоянии достичь 2-ой и 3-ий.

Пожалуйста, помогите. Заранее спасибо.

+0

Добро пожаловать в [so], вы можете найти эту проблему в [so] или google в первую очередь, а затем показать нам проблему, с которой вы столкнулись; Этот пост может помочь вам: http://stackoverflow.com/questions/33839579/mvc-asp-net-zip-file-download – Prisoner

+0

Я искал эту проблему за последние 2 дня, но ничто не соответствует моим требованиям. Ссылка в вашем комментарии также генерирует файл из фиксированного местоположения, но, как я уже упоминал выше, у меня нет определенного места. –

+0

Является ли «фиксированное местоположение» вы имеете в виду «Path.GetTempPath»?Прочтите https://msdn.microsoft.com/en-us/library/system.io.path.gettemppath(v=vs.110).aspx – Prisoner

ответ

0

Я был попробовать свой код, и вы должны изменить эту часть кода,

Response.Clear(); 
Response.Buffer = true; 
Response.AddHeader("content-disposition", "attachment;filename=HeaderSection.txt"); 
Response.Charset = ""; 
Response.ContentType = "application/text"; 
Response.Output.Write(csvHeader); 

К этому

System.IO.File.WriteAllText("C://csvHeader.csv", csvHeader); 

System.IO.File.WriteAllText создаст файл базы данных на строковом вводе, в этом случае csvHeader и csvDetail, вы также можете изменить путь "C: // csvH eader.csv " в другое указанное местоположение.

Затем после всего файла вам нужно созданные в этом определенном месте, вы можете использовать System.IO.Compression в ZIP всех CSV, который вы создали, или, может быть, вы можете использовать внешнюю библиотеку, как ионического Zip, вот некоторые код я использую, если вы заинтересованы в использовании ионные Zip Library,

using (ZipFile zip = new ZipFile()) 
{ 
    zip.AddFile("C://csvHeader.csv"); 
    zip.AddFile("C://csvDetail.csv"); 

    Response.ClearContent(); 
    Response.ClearHeaders(); 
    Response.AppendHeader("content-disposition", "attachment; filename=csv.zip"); 

    zip.Save(Response.OutputStream); 
} 

Она должна Скачать как Zip вашего CSV

Edit : если вы не указали свое местонахождение, вы можете использовать Path.GetTempPath()

Смежные вопросы