public mResult Import(HttpPostedFileBase file, string tabName)
{
mResult ret = new mResult();
ret.Code = "200";
ret.Msg = "操作成功!";
try
{
var strPath = @"~/up/" + DateTime.Now.ToString("yyyyMMdd");
if (!Directory.Exists(strPath))
{
//需要注意的是,需要对这个物理路径有足够的权限,否则会报错
DirectoryInfo di = Directory.CreateDirectory(strPath);
}
var thisFileName = Guid.NewGuid().ToString().Replace("-", "") + "." + file.FileName.Split('.').LastOrDefault();
var thisFilePath = Server.MapPath(strPath) + thisFileName;
file.SaveAs(thisFilePath);
using (var fileStream = System.IO.File.Open(thisFilePath, FileMode.Open))
{
//把xls文件中的数据写入wk中,根据不同的文件格式实例化不同的对象去操作文件
IWorkbook wk;
string filePathChoice = thisFileName.Substring(thisFileName.LastIndexOf('.') + 1);
if (filePathChoice.Equals("xlsx"))
{
wk = new XSSFWorkbook(fileStream);
}
else
{
wk = new HSSFWorkbook(fileStream);
}
var sheet = wk.GetSheetAt(0); //读取当前表数据,直接去第一个Sheet
//判断是否有除去标题行的一行数据
if (sheet.LastRowNum < 1)
{
ret.Msg = "无数据";
}
AssemblyResult assInfo = ah.GetClassInfo("DataCenters.DAL.dll", "DataCenters.DAL." + tabName);
List<object> list = new List<object>();
// 去掉第一行
for (var j = 3; j <= sheet.LastRowNum; j++) //LastRowNum 是当前表的总行数
{
var row = sheet.GetRow(j); //读取当前行数据
var titles = sheet.GetRow(2);//标题列字段
if (row != null)
{
var obj = Activator.CreateInstance(assInfo.ClassType);
for (var k = 0; k <= row.LastCellNum; k++) //LastCellNum 是当前行的总列数
{
var title = titles.GetCell(k).ToString().ToLower().Trim();//对应字段
var cell = row.GetCell(k); //当前表格
var field = assInfo.Properties.Any(w => w.ToLower().Trim() == title) ? assInfo.Properties.FirstOrDefault(w => w.ToLower().Trim() == title) : "";
var fieldType = assInfo.PropertyType[assInfo.Properties.IndexOf(field)];
if (field != "" && cell != null)
{
Debug.WriteLine("field", field);
Debug.WriteLine("fieldType", fieldType);
if (fieldType.ToLower().Contains("decimal"))
{
obj.GetType().GetProperty(field).SetValue(obj, Convert.ToDecimal(cell.ToString()));
}
else if (fieldType.ToLower().Contains("int16"))
{
obj.GetType().GetProperty(field).SetValue(obj, Convert.ToInt16(cell.ToString()));
}
else if (fieldType.ToLower().Contains("int32"))
{
obj.GetType().GetProperty(field).SetValue(obj, Convert.ToInt32(cell.ToString()));
}
else if (fieldType.ToLower().Contains("double"))
{
obj.GetType().GetProperty(field).SetValue(obj, Convert.ToDouble(cell.ToString()));
}
else if (fieldType.ToLower().Contains("datetime"))
{
obj.GetType().GetProperty(field).SetValue(obj, Convert.ToDateTime(cell.ToString()));
}
else
{
obj.GetType().GetProperty(field).SetValue(obj, cell.ToString());
}
}
}
list.Add(obj);
}
}
ret.Data = list;
}
}
catch (Exception e)
{
ret.Code = "500";
ret.Msg = e.Message;
throw;
}
return ret;
}
public class mResult
{
public string Code { get; set; }
public string Msg { get; set; }
public object Data { get; set; }
}
Css流动边框效果
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
<div></div>
</body>
<style>
div{
width: 190px;
height: 190px;
background: #00ff00;
position: relative;
background-image: linear-gradient(to right, transparent, rgba(31, 149, 151, 0.43), transparent);
}
div:before,
div:after{
position: absolute;
content: "";
left: -5px;
right: -5px;
top: -5px;
bottom: -5px;
border: 5px solid #FF33FF;
}
div:before{
animation: move 5s linear infinite;
}
div:after{
border-color: #FF33FF;
animation: move 5s linear infinite normal -2.5s;
}
@keyframes move{
0%,100%{
clip: rect(0,200px,5px,0);
}
25%{
clip: rect(0,200px,200px,195px);
}
50%{
border-color: #00ff0088;
clip: rect(195px,200px,200px,0);
}
75%{
clip: rect(0,5px,200px,0px);
}
}
</style>
</html>
Css点闪烁
.point,.point::before,.point::after{position: absolute;width: 12px; height: 12px; border-radius: 50%;content: ''; }
.point::before{animation: scale 2s infinite; }
.point::after{animation: scale2 2s infinite; }
@keyframes scale{0%{ transform: scale(1); opacity:.9}100%{ transform: scale(6); opacity: 0;}}
@keyframes scale2{0%{ transform: scale(1);opacity:.9;}100%{ transform: scale(12);opacity:0;}}
.point,.point::before,.point::after{
/* 设置颜色 */
background-color: rgba(241, 34, 30, .9);}
CentOS7 安装oracle客户端
1、本机环境CentOS7 64
2、下载oracle客户端包
进入主页面:
32位:
https://www.oracle.com/database/technologies/instant-client/linux-x86-32-downloads.html
64位:
https://www.oracle.com/database/technologies/instant-client/linux-x86-64-downloads.html
下载当前的最新版本18.03,只下载下面两个文件即可
oracle-instantclient18.3-basic-18.3.0.0.0-1.i386.rpm
oracle-instantclient18.3-sqlplus-18.3.0.0.0-1.i386.rpm
3、rpm方式安装包
将上述下载文件放到centos中某个目录下,我的放在/home/ftpuser/下
[root@localhost ftpuser]# pwd /home/ftpuser
# ls -l 总用量 54076 -rw-r–r–. 1 ftpuser ftpuser 54650380 1月 3 10:09 oracle-instantclient18.3-basic-18.3.0.0.0-1.x86_64.rpm -rw-r–r–. 1 ftpuser ftpuser 717272 1月 3 10:09 oracle-instantclient18.3-sqlplus-18.3.0.0.0-1.x86_64.rpm
进入目录,使用命令安装: rpm -ivh oracle-instantclient18.3-basic-18.3.0.0.0-1.i386.rpm rpm -ivh oracle-instantclient18.3-sqlplus-18.3.0.0.0-1.i386.rpm
rpm简单命令复习 1.安装软件:执行rpm -ivh rpm包名 2.查询软件包的详细信息:执行rpm -qpi rpm包名
4、环境变量配置
打开用户专属配置文件(个人理解相当于windows系统环境变量的用户变量,只针对当前用户生效):vi ~/.bashrc
在最后增加如下几行(注意路径是否正确):
[root@localhost ~]# vi ~/.bashrc PATH=$PATH:$HOME/bin export PATH export ORACLE_VERSION=18.3 export ORACLE_HOME=/usr/lib/oracle/$ORACLE_VERSION/client64 export LD_LIBRARY_PATH=$ORACLE_HOME/lib export TNS_ADMIN=$ORACLE_HOME/network/admin export NLS_LANG=AMERICAN_AMERICA.AL32UTF8 #export NLS_LANG="Simplified Chinese_china".ZHS16GBK export PATH=$PATH:$ORACLE_HOME/bin
按下esc输入 :wq 保存退出
5、配置TNS
复制oracle服务端的tnsnames.ora文件,放到/usr/lib/oracle/18.3/client64/network/admin目录下。
6、测试
[root@localhost 18.3]# sqlplus test/ok123@PRODUCT_DB SQL*Plus: Release 18.0.0.0.0 - Production on Mon Apr 8 16:33:32 2019 Version 18.3.0.0.0 Copyright (c) 1982, 2018, Oracle. All rights reserved. Last Successful login time: Mon Apr 08 2019 13:33:20 +08:00 Connected to: Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production With the Partitioning, OLAP, Advanced Analytics and Real Application Testing options
AutoMapHelper帮助类
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Common
{
public static class AutoMapHelper
{
/// <summary>
/// 类型映射,默认字段名字一一对应
/// </summary>
/// <typeparam name="TDestination"></typeparam>
/// <param name="obj"></param>
/// <returns></returns>
public static TDestination AutoMapTo<TDestination>(this object obj)
{
if (obj == null) return default(TDestination);
var config = new AutoMapper.MapperConfiguration(cfg => cfg.CreateMap(obj.GetType(), typeof(TDestination)));
return config.CreateMapper().Map<TDestination>(obj);
}
/// <summary>
/// 类型映射,可指定映射字段的配置信息
/// </summary>
/// <typeparam name="TSource">源数据:要被转化的实体对象</typeparam>
/// <typeparam name="TDestination">目标数据:转换后的实体对象</typeparam>
/// <param name="source">任何引用类型对象</param>
/// <param name="cfgExp">可为null,则自动一一映射</param>
/// <returns></returns>
public static TDestination AutoMapTo<TSource, TDestination>(this TSource source, Action<AutoMapper.IMapperConfigurationExpression> cfgExp)
where TDestination : class
where TSource : class
{
if (source == null) return default(TDestination);
var config = new AutoMapper.MapperConfiguration(cfgExp != null ? cfgExp : cfg => cfg.CreateMap<TSource, TDestination>());
var mapper = config.CreateMapper();
return mapper.Map<TDestination>(source);
}
/// <summary>
/// 类型映射,默认字段名字一一对应
/// </summary>
/// <typeparam name="TSource">源数据:要被转化的实体对象</typeparam>
/// <typeparam name="TDestination">目标数据:转换后的实体对象</typeparam>
/// <param name="source">任何引用类型对象</param>
/// <returns>转化之后的实体</returns>
public static TDestination AutoMapTo<TSource, TDestination>(this TSource source)
where TDestination : class
where TSource : class
{
if (source == null) return default(TDestination);
var config = new AutoMapper.MapperConfiguration(cfg => cfg.CreateMap<TSource, TDestination>());
var mapper = config.CreateMapper();
return mapper.Map<TDestination>(source);
}
/// <summary>
/// 集合列表类型映射,默认字段名字一一对应
/// </summary>
/// <typeparam name="TDestination">转化之后的实体对象,可以理解为viewmodel</typeparam>
/// <typeparam name="TSource">要被转化的实体对象,Entity</typeparam>
/// <param name="source">通过泛型指定的这个扩展方法的类型,理论任何引用类型</param>
/// <returns>转化之后的实体列表</returns>
public static IEnumerable<TDestination> AutoMapTo<TSource, TDestination>(this IEnumerable<TSource> source)
where TDestination : class
where TSource : class
{
if (source == null) return new List<TDestination>();
var config = new AutoMapper.MapperConfiguration(cfg => cfg.CreateMap<TSource, TDestination>());
var mapper = config.CreateMapper();
return mapper.Map<List<TDestination>>(source);
}
}
}