一.最近一直在调整去年以及维护去年开发的项目,很久没有在进行我的的博客了。天天抽了必定的时间在研究一些开源的框架,Drapper 以及NHibernate以及当前比较流行的SqlSuper框架 并进行对比当前的EF框架。各有优缺点。很少说了。数据库
二.介绍一下批量导入程序的开发。windows
1.首先找到EXEL的文件的路径进行读取。安全
2.应用FileInfo进行读取,读取结束EXEL后将EXEL文件进行移动到其余的文件夹里面保存起来。app
3.将FileInfo类用于典型的操做,如复制、移动、重命名、建立、打开、删除和追加到文件。框架
4.许多FileInfo方法在您建立或打开文件时返回其余 I/O 类型。可使用这些其余类型进一步操做文件。有关更多信息,请参见特定的FileInfo成员,如Open、OpenRead、OpenText、CreateText或Create。ui
若是打算屡次重用某个对象,可考虑使用 FileInfo的实例方法,而不是File类的相应静态方法,由于并不老是须要安全检查。spa
默认状况下,将向全部用户授予对新文件的彻底读/写访问权限。日志
下表描述了用于自定义各类 FileInfo 方法的行为的枚举。 对象
枚举blog |
说明 |
---|---|
指定对文件的读取和写入访问。 |
|
为已在使用中的文件指定容许的访问级别。 |
|
指定是保留仍是改写现有文件的内容,并指定建立现有文件的请求是否会致使异常。 |
![]() |
---|
在接受路径做为输入字符串的成员中,路径必须是格式良好的,不然将引起异常。例如,若是路径是彻底限定的但以空格开头,则路径在类的方法中不会被修剪。所以,路径的格式不是良好的,并将引起异常。一样,路径或路径的组合不能被彻底限定两次。例如,“c:\temp c:\windows”在大多数状况下也将引起异常。在使用接受路径字符串的方法时,请确保路径是格式良好的。 |
5.而后进行逐行读取变能够了。而后我应用的是原始的EF 进行添加的插入数据的效率不高,可是这个一个很是简单的一个程序。
代码以下:
static void Main(string[] args)
{
//进行导入Exel数据
try
{
WxyhData context = new WxyhData();
string fileDir = Properties.Settings.Default.ExcelFileDir;//进行读取Exel的路径
string fishFile = Properties.Settings.Default.FinishedFileDir;//结束的Exel 的路径
List<string> files = FilesGetter.GetFiles(fileDir);//进行获取目录下面的EXEL
int successCount = 0;
int updateCount = 0;
#region 1.先判断目录是否为空
if (files.Count() > 0)
{
List<string> processedData = new List<string>();
Console.WriteLine("开始从根目录{0}导入文件", fileDir);
#region 2.去掉读取Copy中的文件夹里面的内容
foreach (string fileExc in files)
{
//判断文件是否存在
if (System.IO.File.Exists(fileExc))
{
//若是是以E:\temp\finished 那么就不进行读取不然才进行读取缘由是这个是备份的文件
if (fileExc.StartsWith(fishFile) == false)
{
GlobalTools.WriteLog("AutoGetMXIntAcct", 0, "开始从目录:" + fileDir + "导入文件:" + fileExc);
try
{
Workbook book = new Workbook(fileExc);
var cells = book.Worksheets[0].Cells;
//从文件第1行开始读取
var table = cells.ExportDataTableAsString(0, 0, cells.MaxRow + 1, cells.MaxColumn + 1, true);
GlobalTools.WriteLog("AutoGetMXIntAcct", 0, "开始从目录:" + fileDir + "导入文件:" + fileExc + ", 共" + table.Rows.Count + "条数据");
#region 3.进行逐条的读取Exel中的每一条的数据进行添加到数据库MX_Int_Acct表中
for (int i = 0; i < table.Rows.Count; i++)
{
#region 3.进行读取Exel
var row = table.Rows[i];
string sys_CifCode = "";//手机号码
string sysAccount = ""; //身份证号
int balance = 0;
string acctName = "";
try
{
sys_CifCode = ((string)row["手机号码"]).Trim();
balance = int.Parse((row["活动积分"]).ToString().Trim());
acctName = ((string)row["显示名称"]).Trim() ?? string.Empty;
sysAccount = ((string)row["身份证号码"]).Trim();
}
catch
{
sysAccount = string.Empty;
acctName = string.Empty;
}
int count = context.MX_INT_ACCT.Where(p => p.SYS_CIF_CODE == sys_CifCode).Count();
//若是存在记录就就行更新不然就就行插入的动做.
if (count > 0)
{
MX_INT_ACCT mxIntAcct = context.MX_INT_ACCT.Where(p => p.SYS_CIF_CODE == sys_CifCode).FirstOrDefault();
mxIntAcct.ACCT_NAME = acctName;
mxIntAcct.BALANCE = balance;
mxIntAcct.SYS_CIF_CODE = sys_CifCode;
mxIntAcct.UPDATE_DATE = DateTime.Now;
mxIntAcct.SYS_ACCOUNT = sysAccount;
updateCount++;
Console.WriteLine("更新成功{0}数据", updateCount);
}
else
{
if (processedData.Contains(sys_CifCode))
{
continue;
}
processedData.Add(sys_CifCode);
MX_INT_ACCT mxIntAcct = IntitalMxIntAcct(acctName, balance, sysAccount, sys_CifCode);
context.MX_INT_ACCT.AddObject(mxIntAcct);
successCount++;
Console.WriteLine("导入成功{0}数据", successCount);
}
#endregion
}
using (TransactionScope trans = new TransactionScope(TransactionScopeOption.Required))
{
context.SaveChanges();
trans.Complete();
}
#endregion
}
catch (Exception ex)
{
GlobalTools.WriteLog("AutoGetMXIntAcct", 0, "异常消息" + ex.ToString());
GlobalTools.WriteErrLog("AutoGetMXIntAcct", ex);
}
}
else
{
Console.WriteLine(@"E:\temp\File目录中的备份的文件不进行读取!");
}
}
}
#endregion
}
#endregion
//Exel文件删除
FileInfoExc(files);
}
catch (Exception ex)
{
GlobalTools.WriteLog("AutoMxAcctInt", 0, "错误的日志" + ex.ToString());
}
}
/// <summary>
///将添加的文件进行保存到指定目录以及当前的文件进行删除
/// </summary>
/// <param name="files"></param>
private static void FileInfoExc(List<string> files)
{
foreach (string fileExc in files)
{
FileInfo fileInfo = new FileInfo(fileExc);
string copyfileDir = Properties.Settings.Default.FinishedFileDir;
string copypath = copyfileDir + "\\" + fileInfo.Name + "-copy-" + DateTime.Now.ToString("yyyy-MM-dd-HHmmss");
//File.Move(fileExc, copypath);
File.Move(fileExc, copypath);
//File.Copy(fileExc, copypath);
File.Delete(fileExc);
GlobalTools.WriteLog("AutoGetMXIntAcct", 0, "文件移动到:" + copypath);
}
}