解释下流程,第一步:将数据库表中的数据导出到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异常第二十一章:finally不被执行的情况

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

  2. python list 嵌套 dict 按照字典中的单个key进行单级排序 或 按照多个键进行多级排序

    student = [{"no": 1,"score": 90},{"no": 2,"score": 90},{&quo ...

  3. BruteXSS(汉化版)

    BruteXSS是一个非常强大和快速的跨站点脚本暴力注入.它用于暴力注入一个参数.该BruteXSS从指定的词库加载多种有效载荷进行注入并且使用指定的载荷和扫描检查这些参数很容易受到XSS漏洞.得益于 ...

  4. 修改linux的文件时,如何快速找到要修改的内容

    ♦ 在linux系统下,找到需要修改的文件.使用cd+目录的命令进行文件所在的目录,使用ls命令查看是否有该文件. ♦ 使用vim+文件名,打开该文件 ♦ 快速在文件中找到需要修改的地方.如我们需要修 ...

  5. JDK8的安装及环境配置

    原文链接:https://www.cnblogs.com/chenxj/p/10137221.html 1.下载JDK: a.直接官网下载:http://www.oracle.com/: b.或百度网 ...

  6. 使用sourceTree需要注意的地方

    1.使用CocoaPods 管理第三方库的时候,需要注意不要把Pod文件夹上传到版本管理服务器中 2.使用xcdoe的时候,还有一些个人用户数据也不要上传,可有效避免冲突的发生频率 3.团队开发的时候 ...

  7. (五)Audio子系统之AudioRecord.stop

    在上一篇文章<(四)Audio子系统之AudioRecord.read>中已经介绍了AudioRecord如何获取音频数据,接下来,继续分析AudioRecord方法中的stop的实现 函 ...

  8. C#常用字符串总结

    字符串基础<一> static void Main(string[] args) { string str1 = "I Love You"; string str2 = ...

  9. Compile git version inside go binary

    Compile git version inside go binary Abstract 在我们编写的程序中总是希望可以直接查阅程序的版本,通过--version参数就会输出如下版本信息. Buil ...

  10. Formatting HDFS

    Working on hadoop, especially on test clusters, I have managed to break my HDFS layer and sometimes ...