C#/Net定时导出Excel并定时发送到邮箱
一、定时导出Excel并定时发送到邮箱
首先我们先分析一下该功能有多少个小的任务点:1.Windows计划服务
2.定时导出Excel定指定路径
3.定时发送邮件包含附件
接下来我们一个个解决,
1.1发送邮件
- 现提供一下相关资料:
http://www.cnblogs.com/ForEvErNoME/archive/2012/06/05/2529259.html
- 了解SMTP服务器
SMTP具体是指什么?
SMTP的全称是"Simple Mail Transfer Protocol",即简单邮件传输协议。它是一组用于从源地址到目的地址传输邮件的规范,通过它来控制邮件的中转方式。SMTP 协议属于 TCP/IP 协议簇,它帮助每台计算机在发送或中转信件时找到下一个目的地。SMTP 服务器就是遵循 SMTP 协议的发送邮件服务器。
- 了解常用邮件服务器(例如:QQ邮箱,网易邮箱,新浪邮箱,163邮箱…)
这里以QQ邮箱为例讲解如何注册邮件服务器:
首先需要注册对应服务提供商免费邮箱,因为你要使用邮件服务提供商的SMTP,他们需要对身份进行验证,这样可以避免产生大量的垃圾邮件。
※ 注册方式:打开QQ上的QQ邮箱,点击设置,选择账号,找到POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务,第一个pop3、SMTP服务,点击后面的 开启,会弹出密保验证,根据要求发短信到号码,发送至后会给你一个密码(一定要记住此密码,这是登陆的凭证)
相关参数:QQ邮箱STMP服务器地址为stmp.qq.com,端口为25(别的邮箱自行百度)
到此,注册邮箱服务器就完成了。
- 接下来我们看如何用程序发送邮件
这里可以参考相关资料:
再次,附上自己的源代码,仅供参考
需要导入命名空间 using System.Net.Mail;
- public static void SendEmail()
- {
- //声明一个Mail对象
- MailMessage mymail = new MailMessage();
- mymail.Attachments.Add(new Attachment("D:\\mail.txt")); //为该电子邮件添加附件 附件的路径
- //如果是多个附件 继续.Add()
- mymail.Attachments.Add(new Attachment("C:\\mail.txt"));
- //发件人地址
- //如是自己,在此输入自己的邮箱
- mymail.From = new MailAddress(“发件人邮箱号”)
- //收件人地址
- mymail.To.Add(new MailAddress(“收件人邮箱号”));
- //邮件主题
- mymail.Subject = “邮件主题…”;
- //邮件标题编码
- mymail.SubjectEncoding = System.Text.Encoding.UTF8;
- //发送邮件的内容
- mymail.Body =“邮件内容…”;
- //邮件内容编码
- mymail.BodyEncoding = System.Text.Encoding.UTF8;
- //抄送到其他邮箱
- mymail.CC.Add(new MailAddress(“抄送邮箱号”));
- //是否是HTML邮件
- mymail.IsBodyHtml = true;
- //邮件优先级
- mymail.Priority = MailPriority.High;
- //创建一个邮件服务器类
- SmtpClient myclient = new SmtpClient();
- myclient.Host = "SMTP.qq.com"; //qq邮箱服务器地址,不同的邮箱不同
- //SMTP服务端口s
- myclient.Port = ;
- myclient.EnableSsl = true;
- //验证登录
- myclient.Credentials = new NetworkCredential(EmailKey, PasswordKey);//"@"输入有效的邮箱名, "*"输入有效的密码(此密码就是注册邮箱服务器是发送短信后给的密码)
- myclient.Send(mymail);
- Console.WriteLine("导出Excel成功!");
- }
- 然而这种方法有一定的弊端,程序发布后,.cs文件不可编辑,而配置文件可以用记事本的方式打开编辑,所以跟数据库的连接字符串一个性质,我们把相关可变的信息放到连接字符串。
- 在配置文件中进行以下操作:
- <appSettings> 节点添加以下内容:key value 的形式
- <appSettings>
- <add key="FromKey" value="727472902@qq.com" /> <!—发件人 -->
- <!--如果发给多个人 改这里 NPOI 教程 http://www.cnblogs.com/atao/archive/2009/11/15/1603528.html "-->
- <add key="ToAddKey" value="727472902@qq.com" /> <!—收件人 -->
- <!—主题 -->
- <add key="SubjectKey" value="仓鲜智能便利店" />
- <!—内容-->
- <add key="BodyKey" value="今日销售报表相关情况" />
- <!--抄送人-->
- <add key="CCAddKey" value="222222@qq.com" />
- <!—邮箱服务器 -->
- <add key="EmailKey" value="222****222@qq.com" />
- <!—邮箱服务器 密码 -->
- <add key="PasswordKey" value="cau****yudhi" />
- </appSettings>
- 接下来看看后台代码如何使用它:
- public static void SendEmail()
- {
- //声明一个Mail对象
- MailMessage mymail = new MailMessage();
- mymail.Attachments.Add(new Attachment(ExportExcelSaleDetail())); //为该电子邮件添加附件
- mymail.Attachments.Add(new Attachment(ExportExcelStorage()));
- //发件人地址
- //配置文件的方式读取 在这里读取配置文件中的内容 需要引入
- //using System.Configuration;
- var FromKey = ConfigurationManager.AppSettings["FromKey"].ToString();
- //对应配置文件中的key
- var ToAddKey = ConfigurationManager.AppSettings["ToAddKey"].ToString();
- var SubjectKey = ConfigurationManager.AppSettings["SubjectKey"].ToString();
- var BodyKey = ConfigurationManager.AppSettings["BodyKey"].ToString();
- var CCAddKey = ConfigurationManager.AppSettings["CCAddKey"].ToString();
- var EmailKey = ConfigurationManager.AppSettings["EmailKey"].ToString();
- var PasswordKey = ConfigurationManager.AppSettings["PasswordKey"].ToString();
- //----在这里用configuration 那个类 和读取连接字符串似得 读取刚才的key ---
- mymail.From = new MailAddress(FromKey);
- //收件人地址
- mymail.To.Add(new MailAddress(ToAddKey));
- //邮件主题
- mymail.Subject = SubjectKey;
- //邮件标题编码
- mymail.SubjectEncoding = System.Text.Encoding.UTF8;
- //发送邮件的内容
- mymail.Body = BodyKey;
- //邮件内容编码
- mymail.BodyEncoding = System.Text.Encoding.UTF8;
- //抄送到其他邮箱
- mymail.CC.Add(new MailAddress(CCAddKey));
- //是否是HTML邮件
- mymail.IsBodyHtml = true;
- //邮件优先级
- mymail.Priority = MailPriority.High;
- //创建一个邮件服务器类
- SmtpClient myclient = new SmtpClient();
- myclient.Host = "SMTP.qq.com";
- //SMTP服务端口s
- myclient.Port = ;
- myclient.EnableSsl = true;
- //验证登录
- myclient.Credentials = new NetworkCredential(EmailKey, PasswordKey);//"@"输入有效的邮件名, "*"输入有效的密码
- myclient.Send(mymail);
- Console.WriteLine("导出Excel成功!");
- }
- 再次发送邮件的相关内容就完成了…下面我们学习.net MVC + NPOI 导出Excel
1.2导出Excel到定指路径
1.去官网下载 NPOI相关dll文件:http://npoi.codeplex.com/downloads/get/1572743
2.在项目中添加引用
把Net40文件夹下的NPOI.Dll文件复制到自己的项目中的相关文件夹下,添加引用,浏览,找到刚刚的NPOI.Dll文件,确定
- 下面直接上代码:
- public FileResult ExportExcel(string wareName, string date1, string date2)
- { //创建一个工作簿
- NPOI.HSSF.UserModel.HSSFWorkbook book = new NPOI.HSSF.UserModel.HSSFWorkbook();
- //添加一个sheet //创建一个页
- NPOI.SS.UserModel.ISheet sheet1 = book.CreateSheet("Sheet1");
- //设置单元格 的宽高
- sheet1.DefaultColumnWidth = * ; //宽度
- sheet1.DefaultRowHeightInPoints = ; //高度
- //创建一行
- IRow row = sheet1.CreateRow();
- //创建一列
- ICell cell = row.CreateCell();
- ICellStyle cellStyle = book.CreateCellStyle();////创建样式对象
- IFont font = book.CreateFont(); //创建一个字体样式对象
- font.FontName = "方正舒体"; //和excel里面的字体对应
- font.FontHeightInPoints = ;//字体大小
- font.Boldweight = short.MaxValue;//字体加粗
- cellStyle.SetFont(font); //将字体样式赋给样式对象
- cellStyle.VerticalAlignment = NPOI.SS.UserModel.VerticalAlignment.Center;//垂直对齐
- cellStyle.Alignment = NPOI.SS.UserModel.HorizontalAlignment.Center;//水平对齐
- cell.CellStyle = cellStyle; //把样式赋给单元格
- //给sheet1添加第一行的头部标题
- NPOI.SS.UserModel.IRow row1 = sheet1.CreateRow();
- row1.CreateCell().SetCellValue("商品编号");
- row1.CreateCell().SetCellValue("商品名称");
- row1.CreateCell().SetCellValue("销售数量");
- row1.CreateCell().SetCellValue("商品售价");
- row1.CreateCell().SetCellValue("出售总金额");
- //将数据逐步写入sheet1各个行
- for (int i = ; i < listSale.Count; i++)
- {
- NPOI.SS.UserModel.IRow rowtemp = sheet1.CreateRow(i + );
- //创建单元格并设置它的值 ID
- rowtemp.CreateCell().SetCellValue(listSale[i].waresCode);
- rowtemp.CreateCell().SetCellValue(listSale[i].waresName);
- rowtemp.CreateCell().SetCellValue(listSale[i].saleNum);
- rowtemp.CreateCell().SetCellValue(listSale[i].waresPrice.ToString());
- rowtemp.CreateCell().SetCellValue(listSale[i].saleMoney.ToString());
- }
- // 写入到客户端
- System.IO.MemoryStream ms = new System.IO.MemoryStream();
- book.Write(ms);
- ms.Seek(, SeekOrigin.Begin);
- string a = DateTime.Now.ToString("yyyyMMddHHmmssffff");//这个路径 有 :等符号,路径不支持
- //这里是导出到指定的路径
- string PPath = @"C:\Users\Administrator\Desktop\新建文件夹 (2)\Yuan\Manager\TestWinPlane\Excel\" + a + "商品销售明细报表.xls";
- using (FileStream fs = new FileStream(PPath, FileMode.Create, FileAccess.Write))
- {
- byte[] datab = ms.ToArray();
- fs.Write(datab, , datab.Length);
- fs.Flush();
- }
- ms.Close();
- ms.Dispose();
- return File(ms, "application/vnd.ms-excel", a + "销售明细统计.xls");
- }
- }
1.3 定时计划任务
1.新建项目à 创建控制台应用程序
把定时导出跟定时发送邮件的代码写在这里面:(下面直接上代码)
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- using Manager.BLL;
- using NPOI.SS.UserModel;
- using System.IO;
- using System.Linq.Expressions;
- using System.Web;
- using System.Web.Mvc;
- using Manager;
- using System.Net;
- using System.Net.Mail;
- using System.Configuration;
- using System.Diagnostics;
- namespace TestWinPlane
- {
- public class Program
- {
- public static BaseBll<usersorder> bllorder
- {
- get
- {
- return new UsersOrderBll();
- }
- }
- static Wares2Bll wareBll = new Wares2Bll();
- public static UserBll userbll = new UserBll();
- public static void Main(string[] args)
- {
- //这个里面写你发送邮件的代码 让 win计划去执行他
- Console.WriteLine("发送邮件!!");
- ExportExcelSaleDetail();
- ExportExcelStorage();
- SendEmail();
- //DeleteIO();
- }
- //当前货架商品统计
- public static Manager.BLL.BaseBll2<wares> bll
- {
- get
- {
- return new Wares2Bll();
- }
- }
- public class ListSalePro
- {
- public string waresCode { get; set; }
- public string waresName { get; set; }
- public decimal waresPrice { get; set; } //单价
- public decimal saleMoney { get; set; } // 出售总金额
- public int saleNum { get; set; } //出售数量
- public decimal buyonePrice;
- public decimal buyMoney;
- public decimal ProfitMoney;
- }
- public class ListWare
- {
- public string waresCode { get; set; }
- public string waresName { get; set; }
- public long saleNum { get; set; }
- }
- static string a = DateTime.Now.ToString("yyyyMMddHHmm");//这个路径 有 :等符号,路径不支持
- static string pathUnchange = @"C:\Excel\" + a; //导出的Excel 要存放的路径
- static string ExportExcelSaleDetailPath = "";//商品销售明细报表路径
- static string ExportExcelStoragePath = "";//货架上商品统计报表路径
- static OrderDetailsBll orderDetailBll = new OrderDetailsBll();
- /// <summary>
- /// 当前货架商品统计报表
- /// </summary>
- /// <returns></returns>
- public static string ExportExcelStorage()
- {
- // 1.先筛选出 有效的商品 == 1 ? "有效" : "已下架"
- Expression<Func<wares, bool>> condition1 = x => x.validstatus == ;
- var listCode = bll.Search2(condition1).Select(x => new { x.waresCode, x.waresName, x.waresActual, x.waresBid, x.waresPrice, x.waresSum, x.waresSpec, x.waresUnit, x.validstatus , x.waresWarning }).ToList();
- //创建一个工作簿
- NPOI.HSSF.UserModel.HSSFWorkbook book = new NPOI.HSSF.UserModel.HSSFWorkbook();
- //添加一个sheet //创建一个页
- NPOI.SS.UserModel.ISheet sheet1 = book.CreateSheet("Sheet1");
- //设置单元格 的宽高
- sheet1.DefaultColumnWidth = * ; //宽度
- sheet1.DefaultRowHeightInPoints = ; //高度
- //创建一行
- IRow row = sheet1.CreateRow();
- //创建一列
- ICell cell = row.CreateCell();
- ICellStyle cellStyle = book.CreateCellStyle();////创建样式对象
- IFont font = book.CreateFont(); //创建一个字体样式对象
- font.FontName = "方正舒体"; //和excel里面的字体对应
- font.FontHeightInPoints = ;//字体大小
- font.Boldweight = short.MaxValue;//字体加粗
- cellStyle.SetFont(font); //将字体样式赋给样式对象
- //设置单元格的样式:水平对齐居中
- cellStyle.VerticalAlignment = NPOI.SS.UserModel.VerticalAlignment.Center;//垂直对齐
- cellStyle.Alignment = NPOI.SS.UserModel.HorizontalAlignment.Center;//水平对齐 这两个在这里不起作用
- cell.CellStyle = cellStyle; //把样式赋给单元格
- //给sheet1添加第一行的头部标题 NPOI.SS.UserModel.IRow row1 = sheet1.CreateRow(0);
- row1.CreateCell().SetCellValue("商品编号");
- row1.CreateCell().SetCellValue("商品名称");
- row1.CreateCell().SetCellValue("商品售价");
- row1.CreateCell().SetCellValue("商品进价");
- row1.CreateCell().SetCellValue("商品单位");
- row1.CreateCell().SetCellValue("商品规格");
- row1.CreateCell().SetCellValue("货架承载量 ");
- row1.CreateCell().SetCellValue("商品预警值");
- row1.CreateCell().SetCellValue("当前货架商品数量 ");
- // row1.CreateCell(9).SetCellValue("有效标志 ");
- //将数据逐步写入sheet1各个行
- for (int i = ; i < listCode.Count; i++)
- {
- NPOI.SS.UserModel.IRow rowtemp = sheet1.CreateRow(i + );
- //创建单元格并设置它的值 ID
- rowtemp.CreateCell().SetCellValue(listCode[i].waresCode);
- rowtemp.CreateCell().SetCellValue(listCode[i].waresName);
- rowtemp.CreateCell().SetCellValue(listCode[i].waresPrice.ToString());
- rowtemp.CreateCell().SetCellValue(listCode[i].waresBid.ToString());
- rowtemp.CreateCell().SetCellValue(listCode[i].waresUnit);
- rowtemp.CreateCell().SetCellValue(listCode[i].waresSpec);
- rowtemp.CreateCell().SetCellValue(listCode[i].waresSum.ToString());
- rowtemp.CreateCell().SetCellValue(listCode[i].waresWarning.ToString());
- rowtemp.CreateCell().SetCellValue(listCode[i].waresActual.ToString());
- // rowtemp.CreateCell(9).SetCellValue(listCode[i].validstatus==1?"有效":"已下架");
- }
- // 写入到客户端
- System.IO.MemoryStream ms = new System.IO.MemoryStream();
- book.Write(ms);
- ms.Seek(, SeekOrigin.Begin);
- string completePath = pathUnchange + "当前货架商品报表.xls";
- using (FileStream fs = new FileStream(completePath, FileMode.Create, FileAccess.Write))
- {
- byte[] datab = ms.ToArray();
- fs.Write(datab, , datab.Length);
- fs.Flush();
- fs.Dispose();
- }
- ms.Close();
- ms.Dispose();
- ExportExcelStoragePath = completePath;
- return ExportExcelStoragePath;
- }
- /// <summary>
- ///发送邮件 导入命名空间 using System.Net.Mail;
- /// </summary>
- public static void SendEmail()
- {
- //声明一个Mail对象
- MailMessage mymail = new MailMessage();
- mymail.Attachments.Add(new Attachment(ExportExcelSaleDetailPath)); //为该电子邮件添加附件
- mymail.Attachments.Add(new Attachment(ExportExcelStoragePath));
- //发件人地址
- //如是自己,在此输入自己的邮箱
- //配置文件的方式读取
- var FromKey = ConfigurationManager.AppSettings["FromKey"].ToString();
- var ToAddKey = ConfigurationManager.AppSettings["ToAddKey"].ToString();
- var SubjectKey = ConfigurationManager.AppSettings["SubjectKey"].ToString();
- var BodyKey = ConfigurationManager.AppSettings["BodyKey"].ToString();
- var CCAddKey = ConfigurationManager.AppSettings["CCAddKey"].ToString();
- var EmailKey = ConfigurationManager.AppSettings["EmailKey"].ToString();
- var PasswordKey = ConfigurationManager.AppSettings["PasswordKey"].ToString();
- //----在这里用configuration 那个类 和读取连接字符串似得 读取刚才的key ---
- mymail.From = new MailAddress(FromKey);
- //收件人地址
- mymail.To.Add(new MailAddress(ToAddKey));
- //邮件主题
- mymail.Subject = SubjectKey;
- //邮件标题编码
- mymail.SubjectEncoding = System.Text.Encoding.UTF8;
- //发送邮件的内容
- mymail.Body = BodyKey;
- //邮件内容编码
- mymail.BodyEncoding = System.Text.Encoding.UTF8;
- //添加附件
- //Attachment myfiles = new Attachment(tb_Attachment.PostedFile.FileName);
- //mymail.Attachments.Add(myfiles);
- //抄送到其他邮箱
- mymail.CC.Add(new MailAddress(CCAddKey));
- //是否是HTML邮件
- mymail.IsBodyHtml = true;
- //邮件优先级
- mymail.Priority = MailPriority.High;
- //创建一个邮件服务器类
- SmtpClient myclient = new SmtpClient();
- myclient.Host = "SMTP.qq.com";
- //SMTP服务端口s
- myclient.Port = ;
- myclient.EnableSsl = true;
- //验证登录
- myclient.Credentials = new NetworkCredential(EmailKey, PasswordKey);//"@"输入有效的邮件名, "*"输入有效的密码
- myclient.Send(mymail);
- Console.WriteLine("导出Excel成功!");
- }
- }
- }
2.代码完成之后,运行看看能不能正常运行,正常之后 就该开始部署Windows计划任务了,
1.打开电脑的控制面板-->选择小图标-->管理工具-->任务计划程序-->新文件夹-->创建任务
2.选择触发器选项卡,点击新建,根据自己的需求选择执行的时间
3.选择操作选项卡,点击下方的新建,点击浏览,选择自己项目下的bin文件夹àDebugà选择自己项项目的.exe文件,下面添加参数 可以忽略,点击确定
4.还有条件 跟 设置选项卡,在这里根据需求自己选择。
到此,定时导出跟发送邮件的相关信息就完成了。
C#/Net定时导出Excel并定时发送到邮箱的更多相关文章
- 一、SQL系列之~使用SQL语言导出数据及实现定时导出数据任务
一般情况下,SQL数据库中带有导入与导出数据的直接按键操作,点击数据表所在的数据库--任务--导出/导入数据,根据导入/导出向导直接将数据导出即可. 但导出的数据格式多为Excel格式,如果需要导出的 ...
- MS SQLServer相关自动化程序的问题汇总 (SQLServer每天定时输出EXCEL或xml的格式的问题等 )
· MS SQLServer相关问题 1. 使用MS SQLServer每天定时输出EXCEL格式的文件,实现每天的Excel报表导出 2. 使用MS SQLServer每天定时输出xml格式的文件, ...
- NPOI导出EXCEL报_服务器无法在发送 HTTP 标头之后追加标头
虽然发表了2篇关于NPOI导出EXCEL的文章,但是最近再次使用的时候,把以前的代码粘贴过来,居然报了一个错误: “服务器无法在发送 HTTP 标头之后追加标头” 后来也查询了很多其他同学的文章,都没 ...
- 定时导出用户数据(expdp,impdp)
一 定时导出数据: #!/bin/bash############################################################################### ...
- 通过Linux定时任务实现定时轮询数据库及发送Http请求
通过Linux定时任务实现定时轮询数据库及发送Http请求 概述 有时需要临时增加一个定时任务(需要根据数据库查询结果然后发送HTTP请求),如果在项目中额外增加(Java+Spring+Quartz ...
- ROS 5.x自动定时备份并发送到邮箱(实用)
博主使用ROS已经有很长一段时间了,但经常会忘记备份配置与数据库,加上ROS本身自带的User-Man数据库并不是非常稳定,1年中总会出现1-2次数据丢失的情况.所以费了一定功夫才找到真正可用自动备份 ...
- 使用Apache poi来编写导出excel的工具类
在JavaWeb开发的需求中,我们会经常看到导出excel的功能需求,然后java并没有提供操作office文档的功能,这个时候我们就需要使用额外的组件来帮助我们完成这项功能了. 很高兴Apache基 ...
- PHP导入导出excel表格图片(转)
写excel的时候,我用过pear的库,也用过pack压包的头,同样那些利用smarty等作的简单替换xml的也用过,csv的就更不用谈了.呵呵.(COM方式不讲了,这种可读的太多了,我也写过利用wp ...
- PHP导入导出Excel方法
看到这篇文章的时候,很是惊讶原作者的耐心,虽然我们在平时用的也 有一些,但没有作者列出来的全,写excel的时候,我用过pear的库,也用过pack压包的头,同样那些利用smarty等作的简单替换xm ...
随机推荐
- (转)通过 Javacore 诊断线程挂起等性能问题
原文:https://www.ibm.com/developerworks/cn/websphere/library/techarticles/1406_tuzy_javacore/1406_tuzy ...
- 一道JS面试题引发的血案
刚入职新公司,属于公司萌新一枚,一天下午对着屏幕看代码架构时. BI项目组长给我看了一道面试别人的JS面试题. 虽然答对了,但把理由说错了,照样不及格. 话不多说,直接上题: var a = 1; s ...
- php -- 配置与安装
1.php与apache安装路径 2.安装Apache服务 httpd -k install 开启关闭重启服务 http -k start/stop/restart 3.php.ini-develop ...
- Shell脚本 | 抓取log文件
在安卓应用的测试过程中,遇到 Crash 或者 ANR 后,想必大家都会通过 adb logcat 命令来抓取日志定位问题.如果直接使用 logcat 命令的话,默认抓取出的 log 文件包含安卓运行 ...
- mysql关于timestamp字段相关内容
发现5.6和5.7版本的创建表不一致,从5.6导出数据表创建sql文件,然后导入到5.7表会报错,timestamp不能为空 查看的sql_mode mysql5.0以上支持的三种模式 1. ANSI ...
- 玩转mongodb(七):索引,速度的引领(全文索引、地理空间索引)
本篇博文主要介绍MongoDB中一些常用的特殊索引类型,主要包括: 用于简单字符串搜索的全文本索引: 用于球体空间(2dsphere)和二维平面(2d)的地理空间索引. 一.全文索引 MongoDB有 ...
- Spring Security 之 Remember-Me (记住我)
效果:在用户的session(会话)过期或者浏览器关闭后,应用程序仍能记住它.用户可选择是否被记住.(在登录界面选择) “记住”是什么意思? 就是下次你再访问的时候,直接进入系统,而不需要 ...
- 开源方案搭建可离线的精美矢量切片地图服务-6.Mapbox之.pbf字体库
项目成果展示(所有项目文件都在阿里云的共享云虚拟主机上,访问地图可以会有点慢,请多多包涵). 01:中国地图:http://test.sharegis.cn/mapbox/html/3china.ht ...
- 递推、数位DP解析(以HDU 2089 和 HDU 3555 为例)
HDU 2089 不要62 题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=2089 Problem Description 杭州人称那些傻乎乎粘嗒嗒的人 ...
- oracle中scott/tiger、sys、SYSDBA、system都是什么用
scott 是个演示用户,是让你学习ORACLE用的 SYSDBA 不是用户,可以认为是个权限,超级权限详细点说吧 超级用户分两种 SYSDBA和SYSOPTSYSOPT 后面3 ...