解释下流程,第一步:将数据库表中的数据导出到excel表
                          第二步:将excel表中的数据再插入到数据库表中(当然没有做重复性校验,测试而已)
注:表结构很简单:
  Id (int) 自增
  Name (nvarchar(20))
  Age (int)
  Phone(nvarchar(13))

  class Program
{
/* 首先用ado.net简单封装下 Insert和Select操作,导入导出要用到*/ //封装ado.net Insert操作
static void Insert(string sql, params SqlParameter[] parameters)
{
string connstr = ConfigurationManager.ConnectionStrings["connstr"].ConnectionString;
using (SqlConnection conn = new SqlConnection(connstr))
{
conn.Open();
using (SqlCommand cmd = conn.CreateCommand())
{
cmd.CommandText = sql;
cmd.Parameters.AddRange(parameters);
cmd.ExecuteNonQuery();
}
}
} //封装ado.net Select操作
static DataTable Select(string sql, params SqlParameter[] parameters)
{
DataTable table = new DataTable();
string connstr = ConfigurationManager.ConnectionStrings["connstr"].ConnectionString;
using (SqlConnection conn = new SqlConnection(connstr))
{
conn.Open();
using (SqlCommand cmd = conn.CreateCommand())
{
cmd.CommandText = sql;
cmd.Parameters.AddRange(parameters);
using (SqlDataReader read = cmd.ExecuteReader())
{
table.Load(read);
}
}
}
return table;
} /*封装导入导出方法*/ //从数据库表中导出数据到excel表中
static void Export_toxlsx()
{
IWorkbook wb = new XSSFWorkbook();
ISheet sheet = wb.CreateSheet("sheet1"); //创建工作簿“sheet1”
/*表头*/
IRow title = sheet.CreateRow();
ICell cell_0 = title.CreateCell();
cell_0.SetCellValue("姓名");
ICell cell_1 = title.CreateCell();
cell_1.SetCellValue("年龄");
ICell cell_2 = title.CreateCell();
cell_2.SetCellValue("电话");
/*表内容*/
DataTable tb = Select("select * from t_test");
int i = ;
foreach(DataRow item in tb.Rows)
{
IRow row = sheet.CreateRow(i);
ICell cell0 = row.CreateCell();
cell0.SetCellValue((string)item["Name"]);
ICell cell1 = row.CreateCell();
cell1.SetCellValue((int)item["Age"]);
ICell cell2 = row.CreateCell();
cell2.SetCellValue((string)item["Phone"]);
i++;
} using (Stream stream = File.OpenWrite(@"e:/test/test.xlsx"))
{
wb.Write(stream); //将使用npoi创建的xlsx文件写入到流中
}
Console.WriteLine("Export Done!");
}
//从excel表中将数据导入到数据库中
static void Import_toDb()
{
IWorkbook wb = WorkbookFactory.Create(@"e:/test/test.xlsx");
ISheet sheet = wb.GetSheetAt(); //获取test.xlsx的第一个工作簿 for(int i=; i<=sheet.LastRowNum;i++) //从第一行开始读,第0行为表头
{
IRow row = sheet.GetRow(i);
ICell cell_0 = row.GetCell();
ICell cell_1 = row.GetCell();
ICell cell_2 = row.GetCell(); Insert("insert into t_test (Name,Age,Phone) values(@Name,@Age,@Phone)",
new SqlParameter("@Name",cell_0.StringCellValue),
new SqlParameter("@Age",(int)cell_1.NumericCellValue),
new SqlParameter("@Phone",cell_2.StringCellValue));
}
Console.WriteLine("Inset Done!");
}
static void Main(string[] args)
{ Export_toxlsx();
Import_toDb();
Console.ReadKey();
} }

使用NPOI,完成数据的导入导出的更多相关文章

  1. NPOI 操作数据库中数据的导入导出(Excel.xls文件) 和null数据的处理。

    App.config: <?xml version="1.0" encoding="utf-8" ?> <configuration> ...

  2. 基于EPPlus和NPOI实现的Excel导入导出

    基于EPPlus和NPOI实现的Excel导入导出 CollapseNav.Net.Tool.Excel(NuGet地址) 太长不看 导入 excel 文件流将会转为 ExcelTestDto 类型的 ...

  3. 循序渐进开发WinForm项目(5)--Excel数据的导入导出操作

    随笔背景:在很多时候,很多入门不久的朋友都会问我:我是从其他语言转到C#开发的,有没有一些基础性的资料给我们学习学习呢,你的框架感觉一下太大了,希望有个循序渐进的教程或者视频来学习就好了. 其实也许我 ...

  4. Oracle 数据泵导入导出总结

    Oracle 数据泵(IMPDP/EXPDP)导入导出总结 Oracle数据泵导入导出是日常工作中常用的基本技术之一,它相对传统的逻辑导入导出要高效,这种特性更适合数据库对象数量巨大的情形,因为我日常 ...

  5. Oracle 12c pdb的数据泵导入导出

    12c推出了可插拔数据库,在一个容器cdb中以多租户的形式同时存在多个数据库pdb.在为pdb做数据泵导入导出时和传统的数据库有少许不同.           1,需要为pdb添加tansnames ...

  6. MATLAB中文件的读写和数据的导入导出

    http://blog.163.com/tawney_daylily/blog/static/13614643620111117853933/ 在编写一个程序时,经常需要从外部读入数据,或者将程序运行 ...

  7. mysql 数据到 导入导出 总结

    数据库数据的导入和导出受secure_file_priv配置项影响#限制导入导出,null时无法进行数据的导入导出,空时不限制,设置了目录则只能对该目录下的文件进行导入导出show variables ...

  8. 使用phpExcel实现Excel数据的导入导出(完全步骤)

    使用phpExcel实现Excel数据的导入导出(完全步骤)   很多文章都有提到关于使用phpExcel实现Excel数据的导入导出,大部分文章都差不多,或者就是转载的,都会出现一些问题,下面是本人 ...

  9. 利用PHPExcel 实现excel数据的导入导出(源码实现)

    利用PHPExcel 实现excel数据的导入导出(源码实现) 在开发过程中,经常会遇到导入导出的需求,利用phpexcel类实现起来也是比较容易的,下面,我们一步一步实现 提前将phpexcel类下 ...

  10. SQL Server中bcp命令的用法以及数据批量导入导出

    原文:SQL Server中bcp命令的用法以及数据批量导入导出 1.bcp命令参数解析 bcp命令有许多参数,下面给出bcp命令参数的简要解析 用法: bcp {dbtable | query} { ...

随机推荐

  1. “全栈2019”Java第八十五章:实现接口中的嵌套接口

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

  2. java日期时间

    字母 日期或时间元素 表示 示例 G Era 标志符 Text AD y 年 Year 1996; 96 M 年中的月份 Month July; Jul; 07 w 年中的周数 Number 27   ...

  3. 0、weka学习与使用

    转载自:https://blog.csdn.net/u011067360/article/details/20844443 数据挖掘开源软件:WEKA基础教程 本文档部分来自于网络,随着自己的深入学习 ...

  4. 安卓monkey自动化测试,软硬回车

    1.Monkey程序介绍 在android手机上做自动化测试,monkey比cts,Android UnitTest 好用多了,他其实是继承与adb shell中的一段的shell指令. monkey ...

  5. 在Eclipse平台中,搭建SpringBoot开发环境

    1.查看eclipse版本号,Help->About Eclipse IDE 2.下载对应版本的STS插件 下载地址:https://spring.io/tools3/sts/all(注意版本对 ...

  6. 皕杰报表 javax.naming.NameNotFoundException: Name jdbc is not bound in this Context

    今天做报表的时候,跳转到显示报表页面的时候不出来数据,报错说数据集未产生. 后台报错 javax.naming.NameNotFoundException: Name jdbc is not boun ...

  7. WC2019退役记

    sb题不会,暴力写不完,被全场吊着打,AFO

  8. HttpClient 工具类

    package com.sys.utils; import java.io.IOException; import java.net.URI; import java.util.ArrayList; ...

  9. Cisco ASA 8.3前及8.3后版本Access-list 变化

    8.2及之前 access-list:源地址是真实IP地址,目的地址是映射地址packet-tracer:源地址为真实IP地址,目的地址为映射地址 8.3及之后access-list:源地址和目的地址 ...

  10. Mac 10.12安装粘贴板增加工具ClipMenu

    说明:这个工具可以保留复制过的记录,并且可以快速调出之前复制过的内容,最开发时比较常用,支持图片等. 下载: (链接: https://pan.baidu.com/s/1qXJbM2o 密码: wef ...