解释下流程,第一步:将数据库表中的数据导出到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. API接口安全加强设计方法

    前面两篇相关文章: <Web Api 内部数据思考 和 利用http缓存优化 Api> <Web Api 端点设计 与 Oauth> 1.开放的接口 这样的接口我们天天都在接触 ...

  2. 【OCP-12c】CUUG 071题库考试原题及答案解析(24)

    24. choose the best answer In the EMPLOYEES table there are 1000 rows and employees are working in t ...

  3. lambda 、 map 、filter 、reduce 及 reversed 常用函数

    lambda 匿名函数 什么是lambda? lambda 操作符(或 lambda 函数)通常用来创建小巧的,一次性的匿名函数对象.它的基本语法如下: lambda arguments : expr ...

  4. Python(序列化json,pickle,shelve)

    序列化 参考:https://www.cnblogs.com/yuanchenqi/articles/5732581.html # dic = str({'1':'111'}) # # f = ope ...

  5. 《Spark MLlib 机器学习实战》1——读后总结

    1 概念 2 安装 3 RDD RDD包含两种基本的类型:Transformation和Action.RDD的执行是延迟执行,只有Action算子才会触发任务的执行. 宽依赖和窄依赖用于切分任务,如果 ...

  6. multiprocessor(中)

    一.进程同步(锁) 通过之前的学习,我们千方百计实现了程序的异步,让多个任务可以同时在几个进程中并发处理,他们之间的运行没有顺序,一旦开启也不受我们控制.尽管并发编程让我们能更加充分的利用IO资源,但 ...

  7. Java中常见的jar包及其主要用途

    jar包        用途 axis.jar     SOAP引擎包 commons-discovery-0.2.jar     用来发现.查找和实现可插入式接口,提供一些一般类实例化.单件的生命周 ...

  8. RunningCassandraInEclipse(转载)

    转载自:http://wiki.apache.org/cassandra/RunningCassandraInEclipse Eclipse is open source. Download Ecli ...

  9. TeamView 连接2、3事

    问题1: 客户通过本地远程上服务器开TeamView让我们连,我们连上后发现开户一把她的远程关掉就卡住了. 如图,原来TeamView会启动多用户增强支持. 原来用的是用户ID连的,用户断掉远程后就不 ...

  10. java 字符串(String)常用技巧及自建方法模块汇总

    1.String类常用方法汇总 (1)删除字符串的头尾空白符 public String trim() (2)从指定位置截取字符串 public String substring(int beginI ...