解释下流程,第一步:将数据库表中的数据导出到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. LOJ#2070. 「SDOI2016」平凡的骰子(计算几何)

    题面 传送门 做一道题学一堆东西不管什么时候都是美好的体验呢-- 前置芝士 混合积 对于三个三维向量\(a,b,c\),定义它们的混合积为\((a\times b)\cdot c\),其中$\time ...

  2. Java多线程学习(一)

    在Java多线程应用中,队列的使用率很高,多数生产消费模型的首选数据结构就是队列.Java提供的线程安全的Queue可以分为阻塞队列和非阻塞队列,其中阻塞队列的典型例子是BlockingQueue,非 ...

  3. gulp 搭建个人工作流:文件注入、热启动、跨域

    个人比价推崇前后端分离的开发方式,大家伙各司其职,只需通过 API 进行交流,不仅避免了沟通上的成本,更提升了开发效率.而在前端开发工作中,许多需求和问题是相似的,所以我们的开发模式往往是雷同的,是否 ...

  4. 根据现有PDF模板填充信息(SpringBoot)

    根据现有PDF模板填充信息(SpringBoot+maven) 首先得有一个pdf模板,建立pdf模板需要下载工具 红色框为文本框,filename为域名.java需要根据域名赋值 pom 文件配置 ...

  5. Leetcode 102 二叉树的层次遍历 Python

    二叉树的层次遍历 给定一个二叉树,返回其按层次遍历的节点值. (即逐层地,从左到右访问所有节点). 例如: 给定二叉树: [3,9,20,null,null,15,7],   3   / \ 9 20 ...

  6. (转)Javascript模块化编程(三):Require.js的用法

    转自 ruanyifeng 系列目录: Javascript模块化编程(一):模块的写法 Javascript模块化编程(二):AMD规范 Javascript模块化编程(三):Require.js的 ...

  7. mysql5.7.20多实例编译安装

    好记性不如烂笔头! MySQL多实例 实际上就是在同一台服务器上运行多个mysql服务进程. 相同点:公用同一套MySQL安装程序. 不同点:使用不同的配置文件(也可以相同).启动程序(也可以相同). ...

  8. leetcode python找不同

    给两个字符串,第二个字符串是第一个字符串乱序后再随机插入一个字母在随机的位置,需要我们找到这个字母 输入: s = "abcd" t = "abcde" 输出: ...

  9. 洛谷 P5238 整数校验器

    题目描述 有些时候需要解决这样一类问题:判断一个数 x 是否合法. x 合法当且仅当其满足如下条件: x 格式合法,一个格式合法的整数要么是 0,要么由一个可加可不加的负号,一个 1 到 9 之间的数 ...

  10. 【文档】一、Mysql Binlog概述

    Binlog是一系列日志文件,他们包含的内容是Mysql数据内容的改变.如果想开启binlog功能,需要在启动时带上--log-bin参数. binlog是从Mysql3.23.14版本开始的.它包含 ...