本文主要是介绍Excel导入到数据库(二),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
之前就写过一个将excel导入数据库的博客,http://blog.csdn.net/u011458469/article/details/41913293。这个是利用的Office的一个接口,直接就导入了。但是这个方法有很大的局限性,要求本地得有Office并且还要求了位数是64还是32位,不同位的Office提供了不同的接口,所以这个方法就对环境有了很大的要求,并且这个方法性能不怎么好,导入个1000条的数据就得停顿个2、3秒的。本文介绍了另外一种方法:利用Aspose.cells来导入。(该控件是商用的)
首先,就是引用该控件:
然后导入命名空间:using Aspose.Cells;
第一步是将excel导入到DataTable中:
//读取excel的数据,并放到datatable中。public static System.Data.DataTable ReadExcel(string filePath){Workbook book = new Workbook();book.Open(filePath);Worksheet sheet = book.Worksheets[0];Cells cells = sheet.Cells;return cells.ExportDataTableAsString(0, 0, cells.MaxDataRow + 1, cells.MaxDataColumn + 1, true);}
参数是要导入的excel表的路径。
导入到datatable中之后,第二步就是将该datatable添加到数据库的表中(要添加的表是新建的表,并且表的字段也是变量):
public void Import(string dataTableName, string filePath){//获取excel的数据,放到dt中DataTable dt = ReadExcel(filePath);//获取dt的所有字段名,放入strFieldsName中List<string> strFieldsName = new List<string>();foreach (DataColumn dc in dt.Columns){strFieldsName.Add(dc.ColumnName);}//定义list,拼接字符串List<string> list = new List<string>();string fName = null;for (int i = 0; i < dt.Columns.Count; i++){string fieldsName = strFieldsName[i].ToString().Trim(); //字段名list.Add(fieldsName);fName += list[i].ToString().Trim() + " varchar(30),";//获取字段名,并拼接字符串}fName = fName.Substring(0, fName.Length - 1);//去掉循环到最后的逗号","string sqlStr = "create table " + dataTableName + "( " + fName + ")";string strConn = ConfigurationManager.ConnectionStrings["sqlConn"].ConnectionString;//获取连接数据库的字符串//实例化sql连接SqlConnection conn = new SqlConnection(strConn);conn.Open();//实例化sql命令SqlCommand cmd = new SqlCommand(sqlStr, conn);//执行sql命令,创建数据表。cmd.ExecuteNonQuery();//关闭连接conn.Close();//将dt的数据放到新建的数据表中SqlBulkCopy sqlbulkcopy = new SqlBulkCopy(strConn, SqlBulkCopyOptions.UseInternalTransaction);sqlbulkcopy.DestinationTableName = dataTableName;//数据库中的表名sqlbulkcopy.WriteToServer(dt);}
参数是要新建的表名(tableName)和文件路径(filePath)。
这样就可以导入数据库中了。
这篇关于Excel导入到数据库(二)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!