/// <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数据库的更多相关文章

  1. Excel 数据导入至Sqlserver 数据库中 ltrim() 、rtrim() 、replace() 函数 依次空格无效问题

    今天导一些数据从Excel中至Sqlserver 数据库中,在做数据合并去重的时候发现,有两条数据一模一样,竟然没有进行合并: 最后发现有一条后面有个“空格”,正是因为这个“空格”让我抓狂许久,因为它 ...

  2. EXCEL批量导入到Sqlserver数据库并进行两表间数据的批量修改

    Excel 大量数据导入到sqlserver生成临时表并将临时表某字段的数据批量更新的原表中的某个字段 1:首先要对EXCEL进行处理 列名改成英文,不要有多余的列和行(通过ctrl+shift 左或 ...

  3. excel数据导入到sqlserver中---------工作笔记

    调用页面: using System; using System.Collections.Generic; using System.Linq; using System.Web; using Sys ...

  4. Excel表格数据导入到SQLServer数据库

    转载:http://blog.csdn.net/lishuangzhe7047/article/details/8797416 步骤: 1,选择要插入的数据库--右键--任务--导入数据 2,点击下一 ...

  5. 将Excel文件数据导入到SqlServer数据库的三种方案

    方案一: 通过OleDB方式获取Excel文件的数据,然后通过DataSet中转到SQL Server,这种方法的优点是非常的灵活,可以对Excel表中的各个单元格进行用户所需的操作. openFil ...

  6. 使用navicat for sqlserver 把excel中的数据导入到sqlserver数据库

    以前记得使用excel向mysql中导入过数据,今天使用excel向sqlserver2005导入了数据,在此把做法记录一下 第一步:准备excel数据,在这个excel中有3个sheet,每个she ...

  7. c# excel如何导入到sqlserver数据库

    最近在做这个如何把excel导入到数据库中,经过多方查找,终于找到一个适合的,并且经过自己的完善可以正常使用(忘记原作者博客的链接地址了,敬请见谅) 首先是窗体的创建,文本框显示文件的路径,按钮执行操 ...

  8. 基于NPOI的Excel数据导入

    从Excel导入数据最令人头疼的是数据格式的兼容性,特别是日期类型的兼容性.为了能够无脑导入日期,折腾了一天的NPOI.在经过测试确实可以导入任意格式的合法日期后,写下这篇小文,与大家共享.完整代码请 ...

  9. 简单的将Excel数据同步到SqlServer数据库中

    1.创建一个WinForm程序,添加一个Button控件 2.Button事件 private void button1_Click(object sender, EventArgs e) { Sys ...

随机推荐

  1. id取模分表

    场景 1 假设按用户id分2个库 每个库分10张表. 分表策略 1.用户id%2 确定库  用户id%3确定表. 2.(用户id%(2*10))/ 10  取整确定库,(用户id%(2*10)%10确 ...

  2. java工具库

    Guava: commons:---工具库(尤其里面的排序库) joda-time:

  3. Web前端应该从哪些方面来优化网站

    作者:斯迪链接:https://www.zhihu.com/question/21658448/answer/18903129来源:知乎著作权归作者所有,转载请联系作者获得授权. 不知道是哪位大牛的文 ...

  4. ES6系列_10之Symbol在对象中的作用

    在ES5中 对象属性名都是字符串,这容易造成属性名的冲突,比如,你使用了一个他人提供的对象,但又想为这个对象添加新的方法(mixin 模式),新方法的名字就有可能与现有方法产生冲突,于是 ES6 引入 ...

  5. OpenCL 图像卷积 2

    ▶ 上一篇图像卷积 http://www.cnblogs.com/cuancuancuanhao/p/8535569.html.这篇使用了 OpenCV 从文件读取彩色的 jpeg 图像,进行边缘检测 ...

  6. OpenCL NativeKernel 计算矩阵乘法

    ▶ 使用函数 clEnqueueNativeKernel 来调用 C/C++ 本地函数(在 OpenCL 中将其看做回调函数),使用本地编译器(而不是 OpenCL 编译器)来编译和执行内核 ● 代码 ...

  7. "sc.exe create/delete" - Create or Delete Services

    "sc.exe" can also be used to create and delete services. If you want to create a new servi ...

  8. //todo 的用处

    在代码中添加 //todo 以后要做的事 可以暂时打上标记,以后再来处理. 光有这个没什么用,关键是IDE要支持,比如VS2017,只要按下 ctrl+w,t 就可以在输出窗口中显示出所有 todo的 ...

  9. Notepad++中的高级查找

      准备以下字符串用来演示 abcdeab cdeabcde abcd eabcde   基于扩展的查找 基于扩展的查找不能算是真正的正则表达式搜索,因此这种查找方式仅是提供了支持转义字符.主要常用的 ...

  10. Docker私有仓库registry的搭建及使用

    前言 由于Docker Hub公共仓库很多时候使用这并不是很方便,大分部因为网络的问题可能拉取的时候会很慢或者拉取不到,所以搭建一个本地的私有仓库. 准备 由于此篇文章是在Kubernetes集群安装 ...