读取Excel的记录并导入SQL数据库
准备一下,近段时间,需要把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数据库的更多相关文章
- SQL语句:把Excel文件中数据导入SQL数据库中的方法
1.从Excel文件中,导入数据到SQL数据库情况一.如果接受数据导入的表不存在 select * into jd$ from OPENROWSET('MICROSOFT.JET.OLEDB.4.0' ...
- jsp+servlet上传excel并将数据导入到数据库表的实现方法
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding= ...
- C# EXCEL(.xls和.xlsx)导入到数据库
C# EXCEL(.xls和.xlsx)导入到数据库 转(http://www.cnblogs.com/bart-cai/articles/2716555.html) 原理:1.判断是否是Excel ...
- C#将Excel数据表导入SQL数据库的两种方法(转)
最近用写个winform程序想用excel 文件导入数据库中,网上寻求办法,找到了这个经过尝试可以使用. 方法一: 实现在c#中可高效的将excel数据导入到sqlserver数据库中,很多人通过循环 ...
- C#将Excel数据表导入SQL数据库的两种方法
最近用写个winform程序想用excel 文件导入数据库中,网上寻求办法,找到了这个经过尝试可以使用. 方法一: 实现在c#中可高效的将excel数据导入到sqlserver数据库中,很多人通过循环 ...
- C#将excel数据按照需求导入Sql server遇到的问题(参考而已)
1.千万不要使用永中表格(WPS没用过,这里只是个人观点,不是说永中表格的) 我在公司得到的任务是将excel数据按照需求导入数据库总共主表大概3张,所以有点复杂(列子用的简单表,公司东西还是不要放出 ...
- PHPExcel读取excel的多个sheet存入数据库
//批量导入文章 excel读取 public function importdata ( $filename, $tmp_name ) { //设置超时时间 set_time_limit(0); $ ...
- sqlserver怎么将excel表的数据导入到数据库中
在数据库初始阶段,我们有些数据在EXCEL中做好之后,需要将EXCEL对应列名(导入后对应数据库表的字段名),对应sheet(改名为导入数据库之后的表名)导入指定数据库, 相当于导入一张表的整个数据. ...
- Excel、记事本数据导入到数据库
将手机号批量导入数据库.思路:先将要导入的文件传上项目里,然后读取文件的每行数据并插入数据库,操作完后再将上传的文件删除 文件示例: Excel: 记事本: 前台代码: <div class ...
随机推荐
- form的重置reset
HTML中Form表单的reset方法被用来重置用户所输入的内容,以前一直误以为其是单纯的将input等输入项中的值清空. 但实际上不是这样的,reset方法的本质是将input等输入项中的内容还原为 ...
- mysql插入表数据中文乱码问题解决方案
一.问题 开发中遇到将其它数据库数据插入到mysql数据库表中一直会报类似如下错误: Incorrect string value: '\xE6\x88\x91' for column 'name' ...
- wap2app(三)-- 添加引导页
1.在client_index.html文件中添加如下代码: <script type="text/javascript"> if(window.plus){ plus ...
- [20171115]ZEROCONF ROUTE.txt
[20171115]ZEROCONF ROUTE.txt --//如果你检查linux服务器的网络配置,就可以发现如下一条路由: # route -n | egrep "169.254|D ...
- Linux 内存池【转】
内存池(Memery Pool)技术是在真正使用内存之前,先申请分配一定数量的.大小相等(一般情况下)的内存块留作备用.当有新的内存需求时,就从内存池中分出一部分内存块,若内存块不够再继续申请新的内存 ...
- Fedroa 28 php 和 mail 命令,邮件发不出去
问题:在配置服务中,发现本地命令mail 和 php 邮件函数的邮件发送不出去. 解决方案: 安装 MTA 服务: postfix , sendmail 等. MTA 为 邮件传输代理 想要了解Lin ...
- s面向对象的写法
js面向对象的写法 一.在html中引入该js文件,使用时: <script> var BuyBw8Product = new buyBw8Product(); </script&g ...
- 字符串通过在配置文件配置三个key来进行加密解密
在这里和大家分享一个加密util,相对于md5加密相信大家都已经很熟悉了吧,md5是不可逆的一种加密方式,虽说不可逆但是网上已经有了破解的方法,我这边分享一个免费的破解 网址给大家:https://w ...
- java连接zookeeper服务器出现“KeeperErrorCode = ConnectionLoss for ...”
错误信息如下: Exception in thread "main" org.apache.zookeeper.KeeperException$ConnectionLossExce ...
- January 22nd, 2018 Week 04th Monday
It is only when you are pursued that you become swift. 唯有在被追赶的时候,你才能真正地奔跑. It is so bad a feeling wh ...