注册 登录  
 加关注
查看详情
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

快乐小屋

 
 
 

日志

 
 

将dataset中的数据导出到Excel中  

2012-04-25 10:00:46|  分类: ARCGIS |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
 记得前段时间学习上碰到了需要将dataset中的数据导出到Excel文件中的需要。经过在网络上的收集整理,发现了一种方法。处理的方法是利用 Microsoft.Office.Interop.Excel组件,然后循环遍历dataset中的每一项数据,然后赋值给一个cell,即Excel 文件中的每一个单元格。这个方法的优点就是,容易想到,同时也容易理解。缺点就是,效率较低,在数据量不很大的情况下就能明显的感觉到延迟。因此,后来我 也是一直在寻找其他的较为高效的方法。终于在师兄以前写过的代码中发现了一种利用其他方式的实现。由于利用数据库的SQL语句来进行插入,因此实现了较为 高效的处理。特意整理、重写一份,分享如下。
static void ExportXls(string xlsName,DataSet ds)
        {
            if (xlsName == "" || xlsName == null)
                return;
            if (ds == null) return;
            if (ds.Tables.Count < 1)
            {
                return;
            }
            if (!xlsName.EndsWith(".xls"))
            {
                xlsName += ".xls";
            }
            if (File.Exists(xlsName)) return;
            string xlsPath=xlsName.Substring(0,xlsName.LastIndexOf(@"\"));
            if (!Directory.Exists(xlsPath))
                Directory.CreateDirectory(xlsPath);
            OleDbConnection myConn = null;
            OleDbCommand myComm = null;
            string connectionString = "Provider=Microsoft.Jet.Oledb.4.0;Data Source={0};Extended Properties=Excel 8.0;";
            connectionString = string.Format(connectionString, xlsName);
            string createSQL = "create table {0} ({1})";
            string insertSQL = "insert into {0} values ({1})";
            string create = "", insert = "", parms = "";
            foreach (DataTable dt in ds.Tables)
            {
                create = dt.TableName;
                foreach(DataColumn dc in dt.Columns)
                {
                    insert += dc.ColumnName + " varchar,";
                    parms += "@" + dc.ColumnName + ",";
                }
                insert = insert.Trim(',');
                parms=parms.Trim(',');
                createSQL = string.Format(createSQL, create, insert);
                insertSQL = string.Format(insertSQL, create, parms);
                myConn = new OleDbConnection(connectionString);
                myConn.Open();
                myComm = myConn.CreateCommand();
                myComm.CommandText = createSQL;
                myComm.ExecuteNonQuery();
                for (int i = 0; i < dt.Rows.Count; i++)
                {
                    myComm.Parameters.Clear();
                    DataRow row = dt.Rows[i];
                    foreach (DataColumn dc in dt.Columns)
                    {
                        myComm.Parameters.AddWithValue("@" + dc.ColumnName, row[dc].ToString());
                       
                    }
                    myComm.CommandText = insertSQL;
                    myComm.ExecuteNonQuery();
                }
                myConn.Close();
            }
        }
代码很简单,方法却不错。不过有两点需要注意的:
  (1)在生成dataset的时候,需要手动的给datatable命名,不然保留默认名table的,会在创建表的时候,SQL语句出错。
  (2)Excel文件的连接字符串需要注意“Extentded Properties= Excel 8.0”。
  评论这张
 
阅读(367)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018