准备一下,近段时间,需要把Excel的数据导入数据库中。

引用命名空间:

using System.Configuration;
using System.Data;
using System.Data.OleDb;
using System.Data.SqlClient;

你可以写一个方法,是去读取Excel文档的方法,返回DataSet数据集:

private DataSet ImportExcelToDataSet(string virtualPath, string sqlQueryStatement)
{
string excelConnectionString = DB.ExcelConnectionString(Server.MapPath(virtualPath));
OleDbConnection dc = new OleDbConnection(excelConnectionString);
OleDbDataAdapter da = new OleDbDataAdapter(sqlQueryStatement, dc);
DataSet ds = new DataSet();
da.Fill(ds);
return ds;
}

Source Code

导入数据库,在数据库中,需要创建一个表来存储Excel导入来的数据:

接下来,你可以使作SqlBulkCopy的方法进行复制数据库:

try
{
string cs = ConfigurationManager.ConnectionStrings["InsusSqlConnectionString"].ConnectionString;
using (SqlConnection sqlConn = new SqlConnection(cs))
{
string sqlQueryStatement = "SELECT [Material],[Plnt],[Level],[Item],[Component],[Object description] FROM [Sheet1$]";
string virtualPath = "~/App_Data/Book1.xlsx"; DataSet ds = ImportExcelToDataSet(virtualPath, sqlQueryStatement); DataTable dt = ds.Tables[]; sqlConn.Open();
using (SqlBulkCopy sqlbc = new SqlBulkCopy(sqlConn))
{
sqlbc.DestinationTableName = "BOM";
sqlbc.ColumnMappings.Add("Material", "Material");
sqlbc.ColumnMappings.Add("Plnt", "Plnt");
sqlbc.ColumnMappings.Add("Level", "Level");
sqlbc.ColumnMappings.Add("Item", "Item");
sqlbc.ColumnMappings.Add("Component", "Component");
sqlbc.ColumnMappings.Add("Object description", "Object description");
sqlbc.WriteToServer(dt);
Response.Write("数据导入成功!");
}
}
}
catch (Exception ex)
{
throw ex;
}

Source Code

演示:

下面内容于2017-10-17 14:38分添加:

使用sqlDataReader来导入,没有做过多的测试,速度与DataSet快不了多少:

private OleDbDataReader ImportExcelToDataReader(string virtualPath, string sqlQueryStatement)
{
string excelConnectionString = DB.ExcelConnectionString(Server.MapPath(virtualPath));
OleDbConnection oleConn = new OleDbConnection(excelConnectionString);
OleDbCommand oleComm = new OleDbCommand(sqlQueryStatement, oleConn); oleConn.Open();
return oleComm.ExecuteReader();
}

Source Code

SqlBulkCopy的方法:

 string sqlQueryStatement = "SELECT [Material],[Plnt],[Level],[Item],[Component],[Object description] FROM [Sheet1$]";
string virtualPath = "~/App_Data/Book1.xlsx"; string cs = ConfigurationManager.ConnectionStrings["InsusSqlConnectionString"].ConnectionString;
SqlConnection sqlConn = new SqlConnection(cs); OleDbDataReader reader = ImportExcelToDataReader(virtualPath, sqlQueryStatement); using (SqlBulkCopy bulkCopy = new SqlBulkCopy(sqlConn))
{
bulkCopy.DestinationTableName = "BOM";
try
{
sqlConn.Open();
bulkCopy.WriteToServer(reader);
Response.Write("数据导入成功。");
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
finally
{
reader.Close();
sqlConn.Close();
}
}

Source Code

读取Excel的记录并导入SQL数据库的更多相关文章

  1. SQL语句:把Excel文件中数据导入SQL数据库中的方法

    1.从Excel文件中,导入数据到SQL数据库情况一.如果接受数据导入的表不存在 select * into jd$ from OPENROWSET('MICROSOFT.JET.OLEDB.4.0' ...

  2. jsp+servlet上传excel并将数据导入到数据库表的实现方法

    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding= ...

  3. C# EXCEL(.xls和.xlsx)导入到数据库

    C# EXCEL(.xls和.xlsx)导入到数据库  转(http://www.cnblogs.com/bart-cai/articles/2716555.html) 原理:1.判断是否是Excel ...

  4. C#将Excel数据表导入SQL数据库的两种方法(转)

    最近用写个winform程序想用excel 文件导入数据库中,网上寻求办法,找到了这个经过尝试可以使用. 方法一: 实现在c#中可高效的将excel数据导入到sqlserver数据库中,很多人通过循环 ...

  5. C#将Excel数据表导入SQL数据库的两种方法

    最近用写个winform程序想用excel 文件导入数据库中,网上寻求办法,找到了这个经过尝试可以使用. 方法一: 实现在c#中可高效的将excel数据导入到sqlserver数据库中,很多人通过循环 ...

  6. C#将excel数据按照需求导入Sql server遇到的问题(参考而已)

    1.千万不要使用永中表格(WPS没用过,这里只是个人观点,不是说永中表格的) 我在公司得到的任务是将excel数据按照需求导入数据库总共主表大概3张,所以有点复杂(列子用的简单表,公司东西还是不要放出 ...

  7. PHPExcel读取excel的多个sheet存入数据库

    //批量导入文章 excel读取 public function importdata ( $filename, $tmp_name ) { //设置超时时间 set_time_limit(0); $ ...

  8. sqlserver怎么将excel表的数据导入到数据库中

    在数据库初始阶段,我们有些数据在EXCEL中做好之后,需要将EXCEL对应列名(导入后对应数据库表的字段名),对应sheet(改名为导入数据库之后的表名)导入指定数据库, 相当于导入一张表的整个数据. ...

  9. Excel、记事本数据导入到数据库

    将手机号批量导入数据库.思路:先将要导入的文件传上项目里,然后读取文件的每行数据并插入数据库,操作完后再将上传的文件删除 文件示例: Excel: 记事本:   前台代码: <div class ...

随机推荐

  1. 安全测试 web应用安全测试之XXS跨站脚本攻击检测

    web应用安全测试之XXS跨站脚本攻击检测 by:授客 QQ:1033553122 说明 意在对XSS跨站脚本攻击做的简单介绍,让大家对xss攻击有个初步认识,并能够在实际工作当中运用本文所述知识做些 ...

  2. Telephone dialer

    运行电话拨号器,需要加这个权限,否则不会打通电话.这个权限是用户权限,是谷歌工程师为了跟自己撇清关系,用户需要权限的时候自己加. 运行android程序的时候提示:ActivityManager: W ...

  3. 为什么 APM 能提升 IT 团队工作质量?

    “有必要吗?”这是很多 IT 专业人员在尝试向团队内部推荐应用程序性能管理价值时所面临的问题.APM(应用程序性能管理)能为公司节约成本,提高内部工作效率,并真实了解用户对公司的系统和产品是否满意.除 ...

  4. 如何用vmware workstation来做虚拟化实验

    前言 以前做用vmare只是简单的实验,但是随着现在虚拟化的兴起,我们的开始要开始虚拟化的实验了. 我们看到有些windows 2012的书上面说用hyper-v来实验,但是hyper-v只能做一些列 ...

  5. [Demo_01] MapReduce 实现密码 Top10 统计

    0. 说明 通过 MapReduce 实现密码 Top10 统计 通过两次 MapReduce 实现 1. 流程图 2. 程序编写 密码 Top10 统计代码

  6. HashMap探究

    HashMap 前置 //初始化容量 static final int DEFAULT_INITIAL_CAPACITY = 1 << 4; //容器最大容量 static final i ...

  7. MySql/Oracle和SQL Server的分页查

    假设当前是第PageNo页,每页有PageSize条记录,现在分别用Mysql.Oracle和SQL Server分页查询student表. 1.Mysql的分页查询: 1 SELECT 2 * 3 ...

  8. select for update引发死锁分析

    本文针对MySQL InnoDB中在Repeatable Read的隔离级别下使用select for update可能引发的死锁问题进行分析. 1. 业务案例 业务中需要对各种类型的实体进行编号,例 ...

  9. Linux基础第四课——文件操作

    文件的创建 touch sudo touch 文件1 文件2 文件3 #支持批量创建文件 sudo rm -f 文件1 文件2 文件3 #支持批量创建 也支持批量删除 echo '谁动谁输,对不起我输 ...

  10. Java没有头文件的原因

    http://bbs.csdn.net/topics/100134244 C/C++ 之所以需要头文件(.h),有两个用处,一个是在开发编译的时候,在各个编译单元(Compile Unit)之间共享同 ...