Npoi将excel数据导入到sqlserver数据库
/// <summary>
/// 将excel导入到datatable
/// </summary>
/// <param name="filePath">excel路径</param>
/// <returns>返回datatable</returns>
DataTable ExcelTable = null;
FileStream fs = null;
DataColumn column = null;
DataRow dataRow = null;
IWorkbook workbook = null;
ISheet sheet = null;
IRow row = null;
ICell cell = null;
int startRow = ;
public bool ExcelToDataTable(string filePath)
{ try
{
using (fs = new FileStream(filePath, FileMode.Open, FileAccess.Read))
{
// 解决版本兼容
//07以前为xls,以后为xlsx
if (filePath.IndexOf(".xlsx") > )
{
workbook = new XSSFWorkbook(fs);
}
else if (filePath.IndexOf(".xls") > )
{
workbook = new HSSFWorkbook(fs);
}
if (workbook != null)
{
sheet = workbook.GetSheetAt();//读取第一个sheet
ExcelTable = new DataTable();
if (sheet != null)
{
int rowCount = sheet.LastRowNum;//总行数
if (rowCount > )
{
IRow firstRow = sheet.GetRow();//第二行
int cellCount = firstRow.LastCellNum;//列数
//创建datatable的列
startRow = ;//因为第一行是中文列名所以直接从第二行开始读取
for (int i = firstRow.FirstCellNum; i < cellCount; ++i)
{
cell = firstRow.GetCell(i);
if (cell != null)
{
if (cell.StringCellValue != null)
{
column = new DataColumn(cell.StringCellValue);
ExcelTable.Columns.Add(column);
}
}
} //填充datatable行
for (int i = startRow; i <= rowCount; ++i)
{
row = sheet.GetRow(i);
if (row == null) continue; dataRow = ExcelTable.NewRow();
for (int j = row.FirstCellNum; j < cellCount; ++j)
{
cell = row.GetCell(j);
if (cell == null)
{
dataRow[j] = "";
}
else
{
switch (cell.CellType)
{
case CellType.Blank:
dataRow[j] = "";
break;
case CellType.Numeric:
short format = cell.CellStyle.DataFormat;
//对时间格式的处理
if (format == || format == || format == || format == )
dataRow[j] = cell.DateCellValue;
else
dataRow[j] = cell.NumericCellValue;
break;
case CellType.String:
dataRow[j] = cell.StringCellValue;
break;
}
}
} ExcelTable.Rows.Add(dataRow); }
}
}
}
}
//由于excel表在删除一张表的时候回再次读取回出现空行的原因
//所以需要一个删除空行的方法⇣⇣⇣⇣
List<DataRow> removelist = new List<DataRow>();
for (int i = ; i < ExcelTable.Rows.Count; i++)
{
bool IsNull = true;
for (int j = ; j < ExcelTable.Columns.Count; j++)
{
if (!string.IsNullOrEmpty(ExcelTable.Rows[i][j].ToString().Trim()))
{
IsNull = false;
}
}
if (IsNull)
{
removelist.Add(ExcelTable.Rows[i]);
}
}
for (int i = ; i < removelist.Count; i++)
{
ExcelTable.Rows.Remove(removelist[i]);
}
removelist.Clear();
//遍历将datatable内的值存入数据库
foreach (DataRow item in ExcelTable.Rows)
{ RT_Community com = new Model.RT_Community();
RT_UserInfo userinfo = new Model.RT_UserInfo();
Guid guid = Guid.NewGuid();
Guid guidu = Guid.NewGuid();
int aid = GetVpnUserName(item[].ToString());
int query = ; using (var conn = PublicMethod.GetSqlConnection())
{
//当小区名称存在时会返回-1
query = conn.Execute(@"IF NOT EXISTS
(SELECT Name FROM RT_Community WHERE Name=@Name )
INSERT INTO RT_Community
(Id,VpnUser_id,Name,Sabb,PropertyName,PropertyUserName,PropertyPhone,Address,IsDelete) values
(@Id,@VpnUser_id,@Name,@Sabb,@PropertyName,@PropertyUserName,@PropertyPhone,@Address,@IsDelete)",
new {
Id = guid,
VpnUser_id = aid,
Name = item[].ToString(),
Sabb = ChinesePinYin.GetSpellCode(item[].ToString()),
PropertyName = item[].ToString(),
PropertyUserName = item[].ToString(),
PropertyPhone = item[].ToString(),
Address = item[].ToString(),
IsDelete = ,
});
}
//当返回-1时调用查询小区id的方法对guid重新赋值
if (query == -)
{
guid = GetComId(item[].ToString());
if (guid.ToString() == "00000000-0000-0000-0000-000000000000")
{
//当返回的guid为0时
return false;
}
}
using (var conn = PublicMethod.GetSqlConnection())
{
var result = conn.Execute(@"INSERT INTO RT_UserInfo
(Id,
rt_community_id,
UserCode,
Name,
BuildingNo,
UnitNo,
Floor,
HouseNo,
Address,
HeatType,
Location,
Phone,
IsDelete) VALUES
(@Id,
@rt_community_id,
@UserCode,
@Name,
@BuildingNo,
@UnitNo,
@Floor,
@HouseNo,
@Address,
@HeatType,
@Location,
@Phone,
@IsDelete)",
new
{ Id = guidu,
rt_community_id = guid,
UserCode = item[].ToString(),
Name = item[].ToString(),
BuildingNo = item[].ToString(),
UnitNo = item[].ToString(),
Floor = item[].ToString(),
HouseNo = item[].ToString(),
Location = item[].ToString(),
Address = item[].ToString(),
HeatType = ,
Phone = item[].ToString(),
IsDelete =
});
} }
//成功返回true
return true;
}
catch (Exception)
{
if (fs != null)
{
fs.Close();
}
return false;
}
}
//使用时直接用nuget包搜索nopi第一个导入这样就全装好了简单又省事
Npoi将excel数据导入到sqlserver数据库的更多相关文章
- Excel 数据导入至Sqlserver 数据库中 ltrim() 、rtrim() 、replace() 函数 依次空格无效问题
今天导一些数据从Excel中至Sqlserver 数据库中,在做数据合并去重的时候发现,有两条数据一模一样,竟然没有进行合并: 最后发现有一条后面有个“空格”,正是因为这个“空格”让我抓狂许久,因为它 ...
- EXCEL批量导入到Sqlserver数据库并进行两表间数据的批量修改
Excel 大量数据导入到sqlserver生成临时表并将临时表某字段的数据批量更新的原表中的某个字段 1:首先要对EXCEL进行处理 列名改成英文,不要有多余的列和行(通过ctrl+shift 左或 ...
- excel数据导入到sqlserver中---------工作笔记
调用页面: using System; using System.Collections.Generic; using System.Linq; using System.Web; using Sys ...
- Excel表格数据导入到SQLServer数据库
转载:http://blog.csdn.net/lishuangzhe7047/article/details/8797416 步骤: 1,选择要插入的数据库--右键--任务--导入数据 2,点击下一 ...
- 将Excel文件数据导入到SqlServer数据库的三种方案
方案一: 通过OleDB方式获取Excel文件的数据,然后通过DataSet中转到SQL Server,这种方法的优点是非常的灵活,可以对Excel表中的各个单元格进行用户所需的操作. openFil ...
- 使用navicat for sqlserver 把excel中的数据导入到sqlserver数据库
以前记得使用excel向mysql中导入过数据,今天使用excel向sqlserver2005导入了数据,在此把做法记录一下 第一步:准备excel数据,在这个excel中有3个sheet,每个she ...
- c# excel如何导入到sqlserver数据库
最近在做这个如何把excel导入到数据库中,经过多方查找,终于找到一个适合的,并且经过自己的完善可以正常使用(忘记原作者博客的链接地址了,敬请见谅) 首先是窗体的创建,文本框显示文件的路径,按钮执行操 ...
- 基于NPOI的Excel数据导入
从Excel导入数据最令人头疼的是数据格式的兼容性,特别是日期类型的兼容性.为了能够无脑导入日期,折腾了一天的NPOI.在经过测试确实可以导入任意格式的合法日期后,写下这篇小文,与大家共享.完整代码请 ...
- 简单的将Excel数据同步到SqlServer数据库中
1.创建一个WinForm程序,添加一个Button控件 2.Button事件 private void button1_Click(object sender, EventArgs e) { Sys ...
随机推荐
- undo表空间居高不下和enq: US - contention
这几天遇到一个错误,我也不知道算不算错误吧,因为没有报错,只是在那突然的短短2分钟内表的操作突然降低了,导致了该软件重新启动.查看alert日志没有报错,而是在ASH里找到了TOP SQL框有一个这样 ...
- phpcms 实现动态价格
什么是动态价格(自命名)?—— 一般来说商品有个固定的价格,随着节假日或者促销活动可能会发生价格变化,结束后又恢复原价,如果每次价格变化都需要修改价格,那么不仅在时间上不好把握,也需要消耗更多的人力 ...
- python报头解决粘包简单实现
client------------- #!/usr/bin/env python # encoding: utf-8 # Date: 2018/6/5 import socketimport st ...
- 《Linux内核精髓:精通Linux内核必会的75个绝技》一HACK #1 如何获取Linux内核
HACK #1 如何获取Linux内核 本节介绍获取Linux内核源代码的各种方法.“获取内核”这个说法看似简单,其实Linux内核有很多种衍生版本.要找出自己想要的源代码到底是哪一个,必须首先理解各 ...
- EF 汇总函数使用注意事项Max()/Min()等
一.字符串类型最大值 1.字符串类型的最大值,和数据库的字典排序最后一个相同,如果存在返回null //字符串最大值,是字典排序最后一个 string max1 = _context.students ...
- 如何优化Java垃圾回收-zz
为什么需要优化GC 或者说的更确切一些,对于基于Java的服务,是否有必要优化GC?应该说,对于所有的基于Java的服务,并不总是需要进行GC优化,但前提是所运行的基于Java的系统,包含了如下参数或 ...
- IOS上架截屏 屏幕快照
IOS上架截屏,屏幕快照,4种屏幕尺寸,每种尺寸5张软件功能截图. 大小等于对应设备的屏幕的像素大小.使用模拟器,command +s截图就可以了虚拟机里的手机截屏就保存在mac 桌面上了.jpg,p ...
- InnoDB: The log sequence number in ibdata files does not match
InnoDB: The log sequence number in ibdata files does not matchInnoDB的:在ibdata文件的日志序列号不匹配 可能ibdata文件损 ...
- STL string 常用函数(转)
string类的构造函数: string(const char *s); //用c字符串s初始化 string(int n,char c); //用n个字符c初始化 此外,string类还支持默认构造 ...
- 1 数据库开发--MySQL介绍
1.数据库管理软件 C/S 并发.锁 :SQL语句.语法 基本管理和语法学习 一.介绍: mysql数据库管理软件: 套接字:服务端,客户端:客户端可访问服务端得数据 1.支持并发:操作得是共享得数据 ...