码迷,mamicode.com
首页 > 其他好文 > 详细

原创 Datareader 导出为csv文件方法

时间:2014-08-19 10:36:23      阅读:225      评论:0      收藏:0      [点我收藏+]

标签:blog   os   io   文件   数据   for   ar   cti   

DataReader 是游标只读数据, 如果是大数据导出,用Datatable 将耗费巨大内存资源。因为Datatable 其实就是内存中的一个数据表

代码如下

/// <summary>
        /// SqlDataReader 生成csv文件
        /// </summary>
        /// <param name="fileNameCsv">文件名(包含文件路径)</param>
        /// <param name="dr">数据表</param>
        /// <param name="hideColumnNames">要隐藏的列名</param>
        /// <param name="encoding">编码【默认:GB2312】</param>
        /// <returns></returns>
        protected static void DownloadCsv(string fileNameCsv, string fileNameZip, SqlDataReader dr, string[] hideColumnNames, string encoding="gb2312")
        {
            if (dr != null)
            {
                try
                {
                    Dictionary<string, string> hideCol = new Dictionary<string, string>();
                    foreach (string item in hideColumnNames)
                    {
                        hideCol.Add(item.Trim(), item);
                    }

                    if (!File.Exists(fileNameCsv))
                    {
                        using (StreamWriter sw = new StreamWriter(fileNameCsv, false, Encoding.GetEncoding(encoding)))
                        {
                            string fieldName = string.Empty;
                            StringBuilder sb = new StringBuilder();
                            //写入表头
                            for (int i = 0; i < dr.FieldCount; i++)
                            {
                                fieldName = dr.GetName(i);
                                if (hideCol.ContainsKey(fieldName) == true || fieldName == "")
                                    continue;
                                else
                                {
                                    sb.Append(fieldName);                                  
                                    sb.Append(",");
                                    
                                }
                            }
                            sw.WriteLine(sb.ToString().TrimEnd(‘,‘));
                            sb.Clear();
                            //写入导出数据
                            while (dr.Read())
                            {
                                //遍历每一列
                                for (int i = 0; i < dr.FieldCount; i++)
                                {
                                    fieldName = dr.GetName(i);
                                    if (hideCol.ContainsKey(fieldName) == true || fieldName == "")
                                        continue;
                                    else
                                    {
                                        if (!Convert.IsDBNull(dr[i]))
                                        {
                                            string content = string.Format("\"{0}\"", dr[i].ToString().Replace("\"", "\"\""));
                                            sb.Append(content);
                                        }
                                        else
                                        {
                                            sb.Append("\"\"");
                                        }                                        
                                        sb.Append(",");
                                       
                                    }
                                }
                                sw.WriteLine(sb.ToString().TrimEnd(‘,‘));
                                sb.Clear();//每行数据结束清空已经写入文本的数据
                            }
                        }
                    }
                    dr.Close();
                    string filePath = fileNameCsv.Substring(0, fileNameCsv.LastIndexOf(@"\")+1);//+1 包含最后一个斜杠
                    CreateZipFile(filePath, fileNameZip);//创建压缩文件
                }
                catch(Exception ex)
                {
                    if(!dr.IsClosed)
                    {
                        dr.Close();
                    }
                    LogHelper.WriteErrorLog("ProcessDocument.DownloadCsv", ex.Message);
                }
            }
        }

  

原创 Datareader 导出为csv文件方法,布布扣,bubuko.com

原创 Datareader 导出为csv文件方法

标签:blog   os   io   文件   数据   for   ar   cti   

原文地址:http://www.cnblogs.com/LeeHuan/p/3921239.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!