准备一下,近段时间,需要把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. Oracle 常用的查询操作

    –1. 查询系统所有对象select owner, object_name, object_type, created, last_ddl_time, timestamp, statusfrom db ...

  2. 【转】解决configure: error: C++ compiler cannot create executables问题

    转自:http://www.coderbolg.com/content/83.html 啊……天啊,./configure时报错:configure: error: C++ compiler cann ...

  3. (网页)java中Collections.sort排序详解(转)

    转自CSDN: Comparator是个接口,可重写compare()及equals()这两个方法,用于比价功能:如果是null的话,就是使用元素的默认顺序,如a,b,c,d,e,f,g,就是a,b, ...

  4. 手动将经典 VM 从 VHD 迁移到新的 ARM 托管磁盘 VM

    本部分有助于将现有 Azure VM 从经典部署模型迁移到资源管理器部署模型中的托管磁盘. 计划迁移到托管磁盘 本部分可帮助你针对 VM 和磁盘类型做出最佳决策. 位置 选取 Azure 托管磁盘可用 ...

  5. js判断元素是否是disable状态

    js判断元素是否是disable状态 jquery判断元素状态用$(select).prop(属性值) == true js判断button是否可以点击: //判断button是否为不可点击状态 if ...

  6. 4.93Python数据类型之(8)集合

    目录 目录 前言 (一)基本概念 ==1.1有序于无序== ==1.2是否随机访问== ==1.3重复性== ==1.4可变与不可变的集合== (二)集合的增删改查 ==2.1集合的增加== ==2. ...

  7. Java设计模式之九 ----- 解释器模式和迭代器模式

    前言 在上一篇中我们学习了行为型模式的责任链模式(Chain of Responsibility Pattern)和命令模式(Command Pattern).本篇则来学习下行为型模式的两个模式, 解 ...

  8. swift class的虚函数表、扩展、@objc修饰、虚函数的派发方式研究

    swift class的虚函数表.扩展.@objc修饰的研究 工具: swiftc -emit-sil BaseClass.swift | xcrun swift-demangle > Clas ...

  9. 【剑指offer】推断二叉树平衡

    版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/mmc_maodun/article/details/27242575 转载请注明出处:http:// ...

  10. sahrepoint 上传到文档库

    sharepoint学习笔记汇总 http://blog.csdn.net/qq873113580/article/details/20390149         /// <summary&g ...