예제 #1
0
        /// <summary>
        /// 复制目录内所有文件到目标目录
        /// </summary>
        /// <param name="sourceDir">源目录</param>
        /// <param name="targetDir">目标目录</param>
        /// <param name="deleteExistingFile">是否删除已存在文件</param>
        /// <param name="overWrite">覆盖目标文件</param>
        /// <param name="deleteSourceFile">是否删除源文件</param>
        public static void CopyDirectory(string sourceDir, string targetDir, bool deleteExistingFile = true, bool overWrite = false, bool deleteSourceFile = true)
        {
            var folderName = sourceDir.Substring(sourceDir.LastIndexOf("\\", StringComparison.OrdinalIgnoreCase) + 1);

            var desfolderdir = targetDir + "\\" + folderName;

            if (targetDir.LastIndexOf("\\", StringComparison.OrdinalIgnoreCase) == (targetDir.Length - 1))
            {
                desfolderdir = targetDir + folderName;
            }
            var fileNames = Directory.GetFileSystemEntries(sourceDir);

            foreach (var sourceFileName in fileNames) // 遍历所有的文件和目录
            {
                if (Directory.Exists(sourceFileName)) // 先当作目录处理如果存在这个目录就递归Copy该目录下面的文件
                {
                    var currentdir = desfolderdir + "\\" + sourceFileName.Substring(sourceFileName.LastIndexOf("\\", StringComparison.OrdinalIgnoreCase) + 1);
                    if (!Directory.Exists(currentdir))
                    {
                        Directory.CreateDirectory(currentdir);
                    }

                    CopyDirectory(sourceFileName, desfolderdir);
                }

                else // 否则直接copy文件
                {
                    var destFileName = sourceFileName.Substring(sourceFileName.LastIndexOf("\\", StringComparison.OrdinalIgnoreCase) + 1);

                    destFileName = desfolderdir + "\\" + destFileName;
                    if (File.Exists(destFileName))
                    {
                        if (deleteExistingFile)
                        {
                            File.Delete(destFileName); //Delete Existing Files
                        }
                    }

                    if (!Directory.Exists(desfolderdir))
                    {
                        Directory.CreateDirectory(desfolderdir);
                    }
                    try
                    {
                        File.Copy(sourceFileName, destFileName, overWrite);
                    }
                    catch (Exception ex)
                    {
                        LogUtil.WriteException(ex);
                        //if any error return
                        return;
                    }

                    if (deleteSourceFile)
                    {
                        File.Delete(sourceFileName);
                    }
                }
            }
        }
예제 #2
0
        /// <summary>
        /// 从字符串中截取指定两个字符之间的字符
        /// </summary>
        /// <param name="source">源字符串</param>
        /// <param name="start">开始字符(串)</param>
        /// <param name="end">结束字符(串)</param>
        /// <returns></returns>
        public static string CutString(string source, string start, string end)
        {
            var result = string.Empty;

            if (!string.IsNullOrEmpty(source) && source.Contains(start) && source.Contains(end))
            {
                int startIndex, endIndex;
                try
                {
                    startIndex = source.IndexOf(start);
                    if (startIndex == -1)
                    {
                        return(result);
                    }
                    var tmpstr = source.Substring(startIndex + start.Length);
                    endIndex = tmpstr.IndexOf(end);
                    if (endIndex == -1)
                    {
                        return(result);
                    }
                    result = tmpstr.Remove(endIndex);
                }
                catch (Exception ex)
                {
                    LogUtil.WriteException(ex);
                }
            }

            return(result);
        }
예제 #3
0
        /// <summary>
        /// WriteText
        /// </summary>
        /// <param name="logPath">日志路径</param>
        /// <param name="logContent">日志内容</param>
        private static void WriteText(string logPath, string logContent)
        {
            try
            {
                //不存在就创建
                if (!File.Exists(logPath))
                {
                    var directoryName = Path.GetDirectoryName(logPath);
                    if (!string.IsNullOrWhiteSpace(directoryName))
                    {
                        if (!Directory.Exists(directoryName))
                        {
                            Directory.CreateDirectory(directoryName);
                        }
                    }
                    using (var fs = new FileStream(logPath, FileMode.Create, FileAccess.ReadWrite, FileShare.ReadWrite))
                    {
                        //转字节和字节数组有性能损耗
                        //byte[] buffer = Encoding.Default.GetBytes(DateTime.Now.ToString(BaseSystemInfo.DateTimeLongFormat) + " " + Thread.CurrentThread.ManagedThreadId + " " + logContent);
                        //fs.Write(buffer, 0, buffer.Length);
                        using (var sw = new StreamWriter(fs))
                        {
                            sw.WriteLine(DateTime.Now.ToString(BaseSystemInfo.DateTimeLongFormat) + " " + Thread.CurrentThread.ManagedThreadId + " " + logContent);
                            sw.Flush();
                            sw.Dispose();
                        }
                        fs.Dispose();
                    }
                }
                else
                {
                    using (var fs = new FileStream(logPath, FileMode.Append, FileAccess.Write, FileShare.ReadWrite))
                    {
                        //转字节和字节数组有性能损耗
                        //byte[] buffer = Encoding.Default.GetBytes(DateTime.Now.ToString(BaseSystemInfo.DateTimeLongFormat) + " " + Thread.CurrentThread.ManagedThreadId + " " + logContent);
                        //fs.Write(buffer, 0, buffer.Length);
                        using (var sw = new StreamWriter(fs))
                        {
                            sw.WriteLine(DateTime.Now.ToString(BaseSystemInfo.DateTimeLongFormat) + " " + Thread.CurrentThread.ManagedThreadId + " " + logContent);
                            sw.Flush();
                            sw.Dispose();
                        }
                        fs.Dispose();
                    }

                    //using (var sw = new StreamWriter(logPath, true, Encoding.Default))
                    //{
                    //    sw.WriteLine(DateTime.Now.ToString(BaseSystemInfo.DateTimeLongFormat) + " " + Thread.CurrentThread.ManagedThreadId + " " + logContent);
                    //    sw.Flush();
                    //    sw.Dispose();
                    //}
                }
            }
            catch (Exception ex)
            {
                LogUtil.WriteException(ex);
                LogUtil.WriteLog("logPath:" + logPath + "logContent:" + logContent, "Exception");
            }
        }
예제 #4
0
        /// <summary>
        /// 批量修改节点值
        /// </summary>
        /// <param name="filePath">路径</param>
        /// <param name="parameters">节点,值</param>
        /// <param name="nameSpace">命名空间</param>
        /// <returns></returns>

        /**************************************************
         * 使用示列:
         * XmlHelper.BatchUpdateNodeValue(path, parameters, nameSpace)
         ************************************************/
        public static void BatchUpdateNodeValue(string filePath, List <KeyValuePair <string, string> > parameters, string nameSpace = "")
        {
            if (!string.IsNullOrEmpty(filePath))
            {
                if (!filePath.Contains(@":\") && filePath.Contains(@"/"))
                {
                    filePath = System.Web.HttpContext.Current.Server.MapPath(filePath);
                }
                try
                {
                    var doc = new XmlDocument();
                    doc.Load(filePath);
                    if (parameters != null && parameters.Count > 0)
                    {
                        foreach (var parameter in parameters)
                        {
                            if (!string.IsNullOrEmpty(parameter.Key) && !string.IsNullOrEmpty(parameter.Value))
                            {
                                var node  = parameter.Key;
                                var value = parameter.Value;
                                var xn    = doc.SelectSingleNode(node);
                                if (!string.IsNullOrEmpty(nameSpace))
                                {
                                    var xmlnam = new XmlNamespaceManager(doc.NameTable);
                                    xmlnam.AddNamespace("a", nameSpace);
                                    node = node.Replace("/", "/a:");
                                    xn   = doc.SelectSingleNode(node, xmlnam);
                                }
                                var xe = (XmlElement)xn;
                                if (xe != null)
                                {
                                    xe.InnerText = value;
                                }
                            }
                        }
                    }
                    //最后一次性保存
                    //doc.Save(filePath);//空白标签会产生多余换行符
                    var settings = new XmlWriterSettings();
                    settings.Indent             = true;
                    settings.ConformanceLevel   = ConformanceLevel.Auto;
                    settings.IndentChars        = "\t";
                    settings.OmitXmlDeclaration = false;
                    settings.Encoding           = Encoding.UTF8;
                    using (var xmlWriter = XmlWriter.Create(filePath, settings))
                    {
                        doc.Save(xmlWriter);
                    }
                }
                catch (Exception ex)
                {
                    LogUtil.WriteException(ex);
                }
            }
        }
예제 #5
0
 /// <summary>
 /// 向sheet插入图片
 /// </summary>
 /// <param name="workbook">工作簿</param>
 /// <param name="sheet">工作表</param>
 /// <param name="filePath">文件路径</param>
 /// <param name="row">第几行</param>
 /// <param name="col">第几列</param>
 /// <param name="suffix">后缀</param>
 private static void AddPicture(XSSFWorkbook workbook, ISheet sheet, string filePath, int row, int col, string suffix)
 {
     try
     {
         if (!string.IsNullOrEmpty(filePath))
         {
             //转为本地路径
             filePath = HttpContext.Current.Server.MapPath(filePath);
             if (File.Exists(filePath))
             {
                 var bytes = File.ReadAllBytes(filePath);
                 if (bytes.Length > 0)
                 {
                     var imagedId    = 0;
                     var pictureType = new PictureType();
                     if (suffix.Equals("png", StringComparison.OrdinalIgnoreCase))
                     {
                         pictureType = PictureType.PNG;
                     }
                     else if (suffix.Equals("jpg", StringComparison.OrdinalIgnoreCase))
                     {
                         pictureType = PictureType.JPEG;
                     }
                     else
                     {
                         pictureType = PictureType.JPEG;
                     }
                     var patriarch = sheet.CreateDrawingPatriarch();
                     imagedId = workbook.AddPicture(bytes, pictureType);
                     //处理照片位置,【图片左上角为(col, row)第row+1行col+1列,右下角为( col +1, row +1)第 col +1+1行row +1+1列,第三个参数为宽,第四个参数为高
                     var anchor = new XSSFClientAnchor(0, 0, 0, 0, col, row, col + 1, row + 1);
                     //dx1:图片左边相对excel格的位置(x偏移) 范围值为:0~1023;即输100 偏移的位置大概是相对于整个单元格的宽度的100除以1023大概是10分之一
                     //dy1:图片上方相对excel格的位置(y偏移) 范围值为:0~256 原理同上。
                     //dx2:图片右边相对excel格的位置(x偏移) 范围值为:0~1023; 原理同上。
                     //dy2:图片下方相对excel格的位置(y偏移) 范围值为:0~256 原理同上。
                     anchor.AnchorType = AnchorType.MoveDontResize;
                     //anchor.AnchorType = 3;
                     //load the picture and get the picture index in the workbook
                     var picture = (XSSFPicture)patriarch.CreatePicture(anchor, imagedId);
                     //Reset the image to the original size.
                     //picture.Resize();   //Note: Resize will reset client anchor you set. 这句话一定不要,这是用图片原始大小来显示
                     //picture.Resize(0.5);
                     picture.LineStyle = LineStyle.DashDotGel;
                 }
             }
         }
     }
     catch (Exception ex)
     {
         LogUtil.WriteException(ex);
         //此处采用跳过的方式
         //throw ex;
     }
 }
예제 #6
0
        /// <summary>
        /// 缓存处理 Redis
        /// </summary>
        /// <param name="cacheKey">缓存的Key</param>
        /// <param name="proc">处理函数</param>
        /// <param name="isFromCache">是否从缓存读取</param>
        /// <param name="refreshCache">是否强制刷新</param>
        /// <param name="cacheTime"></param>
        /// <returns></returns>
        private static T RedisCache <T>(string cacheKey, Func <T> proc, bool isFromCache = true, bool refreshCache = false, TimeSpan cacheTime = default(TimeSpan))
        {
            if (cacheTime == default(TimeSpan))
            {
                cacheTime = TimeSpan.FromMilliseconds(30 * 1000);//设置默认缓存30秒
            }
            T result;

            if (isFromCache)
            {
                //缓存
                if (RedisUtil.Get <T>(cacheKey) != null) //判断是否有缓存
                {
                    //已经缓存
                    if (refreshCache)//是否强制刷新缓存
                    {
                        //强制刷新
                        result = proc();
                        if (result != null)
                        {
                            RedisUtil.Set(cacheKey, result, cacheTime);
                        }
                    }
                    else
                    {
                        //不强制刷新
                        try
                        {
                            result = (T)RedisUtil.Get <T>(cacheKey);
                        }
                        catch (Exception ex)
                        {
                            result = proc();
                            LogUtil.WriteException(ex);
                        }
                    }
                }
                else
                {
                    //未缓存
                    result = proc();
                    if (result != null)
                    {
                        RedisUtil.Set(cacheKey, result, cacheTime);
                    }
                }
            }
            else
            {
                result = proc();
            }
            return(result);
        }
예제 #7
0
 /// <summary>
 /// 移除缓存
 /// </summary>
 /// <param name="cacheKey"></param>
 public static bool Remove(string cacheKey)
 {
     try
     {
         Cache.Remove(cacheKey);
         return(true);
     }
     catch (Exception ex)
     {
         LogUtil.WriteException(ex);
         return(false);
     }
 }
예제 #8
0
 /// <summary>
 /// JSON文本转对象,泛型方法
 /// </summary>
 /// <typeparam name="T">类型</typeparam>
 /// <param name="jsonText">JSON文本</param>
 /// <returns>指定类型的对象</returns>
 public static T JsonToObject <T>(string jsonText)
 {
     try
     {
         return(JsonConvert.DeserializeObject <T>(jsonText));
     }
     catch (Exception ex)
     {
         LogUtil.WriteException(ex);
         return(default(T));
         //throw new Exception("jsonUtil.JsonToObject(): " + ex.Message);
     }
 }
예제 #9
0
        /// <summary>
        /// 修改数据
        /// </summary>
        /// <param name="filePath">路径</param>
        /// <param name="node">节点</param>
        /// <param name="attribute">属性名,非空时修改该节点属性值,否则修改节点值</param>
        /// <param name="value">值</param>
        /// <param name="nameSpace">命名空间</param>
        /// <returns></returns>

        /**************************************************
         * 使用示列:
         * XmlHelper.Insert(path, "/Node", "", "Value")
         * XmlHelper.Insert(path, "/Node", "Attribute", "Value")
         ************************************************/
        public static void Update(string filePath, string node, string attribute, string value, string nameSpace = "")
        {
            if (!string.IsNullOrEmpty(filePath))
            {
                if (!filePath.Contains(@":\") && filePath.Contains(@"/"))
                {
                    filePath = System.Web.HttpContext.Current.Server.MapPath(filePath);
                }
                try
                {
                    var doc = new XmlDocument();
                    doc.Load(filePath);
                    var xn = doc.SelectSingleNode(node);
                    if (!string.IsNullOrEmpty(nameSpace))
                    {
                        var xmlnam = new XmlNamespaceManager(doc.NameTable);
                        xmlnam.AddNamespace("a", nameSpace);
                        node = node.Replace("/", "/a:");
                        xn   = doc.SelectSingleNode(node, xmlnam);
                    }

                    var xe = (XmlElement)xn;
                    if (xe != null)
                    {
                        if (string.IsNullOrEmpty(attribute))
                        {
                            xe.InnerText = value;
                        }
                        else
                        {
                            xe.SetAttribute(attribute, value);
                        }
                        //doc.Save(filePath);//空白标签会产生多余换行符
                        var settings = new XmlWriterSettings();
                        settings.Indent             = true;
                        settings.ConformanceLevel   = ConformanceLevel.Auto;
                        settings.IndentChars        = "\t";
                        settings.OmitXmlDeclaration = false;
                        using (var xmlWriter = XmlWriter.Create(filePath, settings))
                        {
                            doc.Save(xmlWriter);
                        }
                    }
                }
                catch (Exception ex)
                {
                    LogUtil.WriteException(ex);
                }
            }
        }
예제 #10
0
 /// <summary>
 /// 对象转JSON
 /// </summary>
 /// <param name="obj">对象</param>
 /// <returns>JSON格式的字符串</returns>
 public static string ObjectToJson(object obj)
 {
     try
     {
         var b = Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(obj));
         return(Encoding.UTF8.GetString(b));
     }
     catch (Exception ex)
     {
         LogUtil.WriteException(ex);
         return(string.Empty);
         //throw new Exception("JsonUtil.ObjectToJson(): " + ex.Message);
     }
 }
예제 #11
0
        /// <summary>
        /// 内存缓存处理 微软
        /// </summary>
        /// <param name="cacheKey">缓存的Key</param>
        /// <param name="proc">处理函数</param>
        /// <param name="isFromCache">是否从缓存读取</param>
        /// <param name="refreshCache">是否强制刷新</param>
        /// <param name="cacheTime"></param>
        /// <returns></returns>
        private static T MemoryCache <T>(string cacheKey, Func <T> proc, bool isFromCache = true, bool refreshCache = false, TimeSpan cacheTime = default(TimeSpan))
        {
            T result;

            if (isFromCache)
            {
                //缓存
                if (MemoryUtil.Get(cacheKey) != null) //判断是否有缓存
                {
                    //已经缓存
                    if (refreshCache)//是否强制刷新缓存
                    {
                        //强制刷新
                        result = proc();
                        if (result != null)
                        {
                            MemoryUtil.Set(cacheKey, result, cacheTime);
                        }
                    }
                    else
                    {
                        //不强制刷新
                        try
                        {
                            result = (T)MemoryUtil.Get(cacheKey);
                        }
                        catch (Exception ex)
                        {
                            result = proc();
                            LogUtil.WriteException(ex);
                        }
                    }
                }
                else
                {
                    //未缓存
                    result = proc();
                    if (result != null)
                    {
                        MemoryUtil.Set(cacheKey, result, cacheTime);
                    }
                }
            }
            else
            {
                result = proc();
            }
            return(result);
        }
예제 #12
0
        /// <summary>
        /// 从Excel2003取数据并记录到List集合里
        /// </summary>
        /// <param name="cellHeader">单元头的Key和Value:{ { "UserName", "姓名" }, { "Age", "年龄" } };</param>
        /// <param name="filePath">保存文件绝对路径</param>
        /// <param name="errorMsg">错误信息</param>
        /// <param name="startIndex">开始行索引(默认1)</param>
        /// <returns>转换好的List对象集合</returns>
        private static List <T> Excel2003ToEntityList <T>(Dictionary <string, string> cellHeader, string filePath, out StringBuilder errorMsg, int startIndex = 1) where T : new()
        {
            if (cellHeader is null)
            {
                throw new ArgumentNullException(nameof(cellHeader));
            }

            if (string.IsNullOrEmpty(filePath))
            {
                throw new ArgumentException($"'{nameof(filePath)}' cannot be null or empty.", nameof(filePath));
            }

            errorMsg = Pool.StringBuilder.Get(); // 错误信息,Excel转换到实体对象时,会有格式的错误信息
            var ls = new List <T>();             // 转换后的集合

            try
            {
                using (var fs = File.OpenRead(filePath))
                {
                    var workbook = new HSSFWorkbook(fs);
                    var sheet    = (HSSFSheet)workbook.GetSheetAt(0); // 获取此文件第一个Sheet页
                    for (var rowIndex = startIndex; rowIndex <= sheet.LastRowNum; rowIndex++)
                    {
                        // 1.判断当前行是否空行,若空行就不在进行读取下一行操作,结束Excel读取操作
                        var row = sheet.GetRow(rowIndex);
                        if (row == null)
                        {
                            break;
                        }
                        // 2.每一个Excel row转换为一个实体对象
                        var e = new T();
                        ExcelRowToEntity <T>(cellHeader, row, rowIndex, e, ref errorMsg);
                        ls.Add(e);
                    }
                }
                return(ls);
            }
            catch (Exception ex)
            {
                LogUtil.WriteException(ex);
                throw ex;
            }
        }
예제 #13
0
        /// <summary>
        /// 删除数据
        /// </summary>
        /// <param name="filePath">路径</param>
        /// <param name="node">节点</param>
        /// <param name="attribute">属性名,非空时删除该节点属性值,否则删除节点值</param>
        /// <param name="nameSpace">命名空间</param>
        /// <returns></returns>

        /**************************************************
         * 使用示列:
         * XmlHelper.Delete(path, "/Node", "")
         * XmlHelper.Delete(path, "/Node", "Attribute")
         ************************************************/
        public static void Delete(string filePath, string node, string attribute, string nameSpace = "")
        {
            if (!string.IsNullOrEmpty(filePath))
            {
                if (!filePath.Contains(@":\") && filePath.Contains(@"/"))
                {
                    filePath = System.Web.HttpContext.Current.Server.MapPath(filePath);
                }
                try
                {
                    var doc = new XmlDocument();
                    doc.Load(filePath);
                    var xn = doc.SelectSingleNode(node);
                    if (!string.IsNullOrEmpty(nameSpace))
                    {
                        var xmlnam = new XmlNamespaceManager(doc.NameTable);
                        xmlnam.AddNamespace("a", nameSpace);
                        node = node.Replace("/", "/a:");
                        xn   = doc.SelectSingleNode(node, xmlnam);
                    }
                    var xe = (XmlElement)xn;
                    if (xn != null)
                    {
                        if (string.IsNullOrEmpty(attribute))
                        {
                            if (xn.ParentNode != null)
                            {
                                xn.ParentNode.RemoveChild(xn);
                            }
                        }
                        else
                        {
                            xe.RemoveAttribute(attribute);
                        }
                        doc.Save(filePath);
                    }
                }
                catch (Exception ex)
                {
                    LogUtil.WriteException(ex);
                }
            }
        }
예제 #14
0
        /// <summary>
        /// 获取域用户信息
        /// </summary>
        /// <param name="domainUserName"></param>
        /// <returns></returns>
        public static DomainUserInfo GetDomainUserInfo(string domainUserName)
        {
            try
            {
                if (string.IsNullOrEmpty(domainUserName))
                {
                    return(null);
                }

                var userArr   = domainUserName.Split('\\');
                var domain    = userArr[0];
                var loginName = userArr[1];

                var entry  = new DirectoryEntry(string.Concat("LDAP://", domain));
                var search = new DirectorySearcher(entry);
                search.Filter = string.Format("(SAMAccountName={0})", loginName);
                search.PropertiesToLoad.Add("SAMAccountName");
                search.PropertiesToLoad.Add("givenName");
                search.PropertiesToLoad.Add("cn");
                search.PropertiesToLoad.Add("mail");

                var result = search.FindOne();
                if (result != null)
                {
                    var info = new DomainUserInfo
                    {
                        SamAccountName = result.Properties["SAMAccountName"][0].ToString(),
                        GivenName      = result.Properties["givenName"][0].ToString(),
                        Cn             = result.Properties["cn"][0].ToString(),
                        Email          = result.Properties["mail"][0].ToString()
                    };
                    return(info);
                }
            }
            catch (Exception ex)
            {
                LogUtil.WriteException(ex);
            }

            return(null);
        }
예제 #15
0
        /// <summary>
        /// 下载图片
        /// </summary>
        /// <param name="pictureUrl">图片Http地址</param>
        /// <param name="filePath">保存路径</param>
        /// <param name="folder">目录(前后不带/)</param>
        /// <param name="fileName"></param>
        /// <param name="fileExtension">文件后缀(以.开头)</param>
        /// <param name="timeOut">Request最大请求时间,如果为-1则无限制</param>
        /// <returns></returns>
        public static bool DownloadPicture(string pictureUrl, out string filePath, string folder = "WeChat", string fileName = null, string fileExtension = ".png", int timeOut = -1)
        {
            if (string.IsNullOrEmpty(fileName))
            {
                fileName = DateTime.Now.ToString("yyyyMMddHHmmssffff");
            }
            filePath = AppDomain.CurrentDomain.BaseDirectory + "\\" + folder + "\\" + fileName + fileExtension;
            //是否存在文件夹,没存在则创建
            if (!Directory.Exists(AppDomain.CurrentDomain.BaseDirectory + "\\" + folder + "\\"))
            {
                Directory.CreateDirectory(AppDomain.CurrentDomain.BaseDirectory + "\\" + folder + "\\");
            }
            bool        result   = false;
            WebResponse response = null;
            Stream      stream   = null;

            try
            {
                HttpWebRequest request = (HttpWebRequest)WebRequest.Create(pictureUrl);
                if (timeOut != -1)
                {
                    request.Timeout = timeOut;
                }
                response = request.GetResponse();
                stream   = response.GetResponseStream();
                if (!response.ContentType.ToLower().StartsWith("text/"))
                {
                    result = SaveBinaryFile(response, filePath);
                }
            }
            catch (Exception e)
            {
                LogUtil.WriteException(e);
            }
            finally
            {
                stream?.Close();
                response?.Close();
            }
            return(result);
        }
예제 #16
0
 /// <summary>
 /// 异步发送邮件 独立线程
 /// </summary>
 /// <param name="to">邮件接收人</param>
 /// <param name="title">邮件标题</param>
 /// <param name="body">邮件内容</param>
 /// <param name="port">端口号</param>
 /// <returns></returns>
 public static void SendByThread(string to, string title, string body, int port = 25)
 {
     new Thread(new ThreadStart(delegate()
     {
         try
         {
             var smtp = new SmtpClient();
             //邮箱的smtp地址
             smtp.Host = BaseSystemInfo.MailServer;
             //端口号
             smtp.Port = port;
             //构建发件人的身份凭据类
             smtp.Credentials = new NetworkCredential(BaseSystemInfo.MailUserName, BaseSystemInfo.MailPassword);
             //构建消息类
             var objMailMessage = new MailMessage();
             //设置优先级
             objMailMessage.Priority = MailPriority.High;
             //消息发送人
             objMailMessage.From = new MailAddress(BaseSystemInfo.MailUserName, "登录提醒", Encoding.UTF8);
             //收件人
             objMailMessage.To.Add(to);
             //标题
             objMailMessage.Subject = title.Trim();
             //标题字符编码
             objMailMessage.SubjectEncoding = Encoding.UTF8;
             //正文
             objMailMessage.Body       = body.Trim();
             objMailMessage.IsBodyHtml = true;
             //内容字符编码
             objMailMessage.BodyEncoding = Encoding.UTF8;
             //发送
             smtp.Send(objMailMessage);
         }
         catch (Exception ex)
         {
             LogUtil.WriteException(ex);
         }
     })).Start();
 }
예제 #17
0
        /// <summary>
        /// 从Excel取数据并记录到List集合里
        /// </summary>
        /// <param name="cellHeader">单元头的值和名称:{ { "UserName", "姓名" }, { "Age", "年龄" } };</param>
        /// <param name="filePath">保存文件绝对路径</param>
        /// <param name="errorMsg">错误信息</param>
        /// <param name="startIndex">数据行开始序列,默认为1(即第二列,从0开始)</param>
        /// <returns>转换后的List对象集合</returns>
        public static List <T> ExcelToEntityList <T>(Dictionary <string, string> cellHeader, string filePath, out StringBuilder errorMsg, int startIndex = 1) where T : new()
        {
            var enlist = new List <T>();

            errorMsg = Pool.StringBuilder.Get();
            try
            {
                if (Regex.IsMatch(filePath, ".xls$")) // 2003
                {
                    enlist = Excel2003ToEntityList <T>(cellHeader, filePath, out errorMsg, startIndex);
                }
                else if (Regex.IsMatch(filePath, ".xlsx$")) // 2007
                {
                    enlist = Excel2007ToEntityList <T>(cellHeader, filePath, out errorMsg, startIndex);
                }
                return(enlist);
            }
            catch (Exception ex)
            {
                LogUtil.WriteException(ex);
                throw ex;
            }
        }
예제 #18
0
        /// <summary>
        /// 读取数据
        /// </summary>
        /// <param name="filePath">路径</param>
        /// <param name="node">节点</param>
        /// <param name="attribute">属性名,非空时返回该属性值,否则返回串联值</param>
        /// <param name="nameSpace">命名空间</param>
        /// <returns>string</returns>

        /**************************************************
         * 使用示列:
         * XmlHelper.Read(path, "/Node", "")
         * XmlHelper.Read(path, "/Node/Element[@Attribute='Name']", "Attribute")
         ************************************************/
        public static string Read(string filePath, string node, string attribute, string nameSpace = "", IFileProvider fileProvider)
        {
            var value = string.Empty;

            if (!string.IsNullOrEmpty(filePath))
            {
                if (!filePath.Contains(@":\") && filePath.Contains(@"/"))
                {
                    filePath = System.Web.HttpContext.Current.Server.MapPath(filePath);
                }
                try
                {
                    var doc = new XmlDocument();
                    doc.Load(filePath);
                    var xn = doc.SelectSingleNode(node);
                    if (!string.IsNullOrEmpty(nameSpace))
                    {
                        var xmlnam = new XmlNamespaceManager(doc.NameTable);
                        xmlnam.AddNamespace("a", nameSpace);
                        node = node.Replace("/", "/a:");
                        xn   = doc.SelectSingleNode(node, xmlnam);
                    }
                    if (xn != null)
                    {
                        if (xn.Attributes != null)
                        {
                            value = (string.IsNullOrEmpty(attribute) ? xn.InnerText : xn.Attributes[attribute].Value);
                        }
                    }
                }
                catch (Exception ex)
                {
                    LogUtil.WriteException(ex);
                }
            }
            return(value);
        }
예제 #19
0
 /// <summary>
 /// DES数据解密
 /// 20140219 吉日嘎拉 就是出错了,也不能让程序崩溃
 /// </summary>
 /// <param name="targetValue"></param>
 /// <param name="key"></param>
 /// <returns></returns>
 public static string DesDecrypt(string targetValue, string key)
 {
     if (string.IsNullOrEmpty(targetValue))
     {
         return(string.Empty);
     }
     // 定义DES加密对象
     try
     {
         var des = new DESCryptoServiceProvider();
         var len = targetValue.Length / 2;
         var inputByteArray = new byte[len];
         int x, i;
         for (x = 0; x < len; x++)
         {
             i = Convert.ToInt32(targetValue.Substring(x * 2, 2), 16);
             inputByteArray[x] = (byte)i;
         }
         // 通过两次哈希密码设置对称算法的初始化向量
         des.Key = Encoding.ASCII.GetBytes(Sha1(Md5(key).Substring(0, 8)).Substring(0, 8));
         // 通过两次哈希密码设置算法的机密密钥
         des.IV = Encoding.ASCII.GetBytes(Sha1(Md5(key).Substring(0, 8)).Substring(0, 8));
         // 定义内存流
         var ms = new MemoryStream();
         // 定义加密流
         var cs = new CryptoStream(ms, des.CreateDecryptor(), CryptoStreamMode.Write);
         cs.Write(inputByteArray, 0, inputByteArray.Length);
         cs.FlushFinalBlock();
         return(Encoding.Default.GetString(ms.ToArray()));
     }
     catch (Exception ex)
     {
         LogUtil.WriteException(ex);
     }
     return(string.Empty);
 }
예제 #20
0
        /// <summary>
        /// 执行查询
        /// </summary>
        /// <param name="commandText">sql查询</param>
        /// <param name="dbParameters">参数集</param>
        /// <param name="commandType">命令分类</param>
        /// <returns>Object</returns>
        public virtual object ExecuteScalar(string commandText, IDbDataParameter[] dbParameters, CommandType commandType)
        {
            var stopwatch = new Stopwatch();

            stopwatch.Start();
            // 自动打开
            MustCloseConnection = true;
            if (DbConnection == null)
            {
                Open();
            }

            object result = null;

            if (DbConnection.State == ConnectionState.Closed)
            {
                DbConnection.Open();
            }
            else if (DbConnection.State == ConnectionState.Broken)
            {
                DbConnection.Close();
                DbConnection.Open();
            }
            using (DbCommand = DbConnection.CreateCommand())
            {
                try
                {
#if (DEBUG)
                    Trace.WriteLine(DateTime.Now + " :DbConnection Start: " + DbConnection.Database + " ,ThreadId: " + Thread.CurrentThread.ManagedThreadId);
#endif
                    DbCommand.Connection     = DbConnection;
                    DbCommand.CommandTimeout = DbConnection.ConnectionTimeout;
                    DbCommand.CommandText    = commandText;
                    if (CurrentDbType == CurrentDbType.Oracle)
                    {
                        // 针对Oracle,全局替换换行符,避免报错或不执行
                        // 仅当前系统的换行符
                        DbCommand.CommandText = commandText.Replace(Environment.NewLine, " ");
                        // 各种平台的换行符
                        //_dbCommand.CommandText = commandText.Replace("r\n", " ").Replace('\n', ' ').Replace('\r', ' ');
                    }

                    DbCommand.CommandType = commandType;

                    if (_dbTransaction != null)
                    {
                        DbCommand.Transaction = _dbTransaction;
                    }

                    if (dbParameters != null)
                    {
                        DbCommand.Parameters.Clear();
                        for (var i = 0; i < dbParameters.Length; i++)
                        {
                            if (dbParameters[i] != null)
                            {
                                DbCommand.Parameters.Add(((ICloneable)dbParameters[i]).Clone());
                                // dbCommand.Parameters.Add(dbParameters[i]);
                            }
                        }
                    }

                    //写入日志
                    SqlUtil.WriteLog(commandText, commandType.ToString(), dbParameters);
                    if (DbConnection.State != ConnectionState.Open)
                    {
                        DbConnection.Open();
                    }
                    result = DbCommand.ExecuteScalar();

                    // 这里进行输出参数的处理
                    if (CurrentDbType == CurrentDbType.SqlServer)
                    {
                        SetBackParamValue(dbParameters);
                    }
                }
                catch (Exception e)
                {
                    var sb = Pool.StringBuilder.Get();
                    sb.Append(commandText);
                    sb.Append(" ");
                    sb.Append(commandType.ToString());
                    if (dbParameters != null)
                    {
                        sb.Append(" dbParameters: ");
                        foreach (var parameter in dbParameters)
                        {
                            sb.Append(parameter.ParameterName + "=" + parameter.Value + " ");
                        }
                    }
                    LogUtil.WriteException(e, sb.Put());
                }
                finally
                {
                    //自动关闭
                    if (MustCloseConnection)
                    {
                        Close();
                    }
                    else
                    {
                        DbCommand.Parameters.Clear();
                    }
                }
                stopwatch.Stop();
                var statisticsText = $"Elapsed time: {stopwatch.Elapsed.TotalMilliseconds}ms";
                SqlUtil.WriteLog(commandText, commandType.ToString(), dbParameters, statisticsText);
                if (stopwatch.Elapsed.TotalMilliseconds >= BaseSystemInfo.SlowQueryMilliseconds)
                {
                    var sb = Pool.StringBuilder.Get();
                    sb.Append(commandText);
                    sb.Append(" ");
                    sb.Append(commandType.ToString());
                    if (dbParameters != null)
                    {
                        sb.Append(" dbParameters: ");
                        foreach (var parameter in dbParameters)
                        {
                            sb.Append(parameter.ParameterName + "=" + parameter.Value + " ");
                        }
                    }
                    else
                    {
                        sb.Append(" ");
                    }
                    sb.Append(statisticsText);
                    LogUtil.WriteLog(sb.Put(), "Slow.DbHelper.ExecuteScalar");
                }
            }

            return(result);
        }
예제 #21
0
        /// <summary>
        /// 利用Net SqlBulkCopy 批量导入数据库,速度超快
        /// </summary>
        /// <param name="dt">源内存数据表(先通过SELECT TOP 0获取空白DataTable)</param>
        /// <param name="destinationTableName">目标表名称</param>
        /// <param name="bulkCopyTimeout">超时限制(毫秒)</param>
        /// <param name="batchSize">批大小(默认0,即一次性导入)</param>
        public override bool SqlBulkCopyData(DataTable dt, string destinationTableName, int bulkCopyTimeout = 1000, int batchSize = 0)
        {
            var result    = false;
            var stopwatch = new Stopwatch();

            stopwatch.Start();
            if (string.IsNullOrEmpty(destinationTableName))
            {
                destinationTableName = dt.TableName;
            }
            // SQL 数据连接
            SqlConnection sqlConnection = null;

            // 打开数据库
            Open();
            // 获取连接
            sqlConnection = (SqlConnection)GetDbConnection();
            using (var tran = sqlConnection.BeginTransaction())
            {
                // 批量保存数据,只能用于Sql
                var sqlBulkCopy = new SqlBulkCopy(sqlConnection, SqlBulkCopyOptions.Default, tran);
                sqlBulkCopy.BatchSize = batchSize;
                // 设置目标表名称
                sqlBulkCopy.DestinationTableName = destinationTableName;
                // 设置超时限制
                sqlBulkCopy.BulkCopyTimeout = bulkCopyTimeout;

                foreach (DataColumn dtColumn in dt.Columns)
                {
                    sqlBulkCopy.ColumnMappings.Add(dtColumn.ColumnName, dtColumn.ColumnName);
                }
                try
                {
                    // 写入
                    sqlBulkCopy.WriteToServer(dt);
                    // 提交事务
                    tran.Commit();
                    result = true;
                }
                catch (Exception ex)
                {
                    tran.Rollback();
                    sqlBulkCopy.Close();
                    LogUtil.WriteException(ex);
                }
                finally
                {
                    sqlBulkCopy.Close();
                    Close();
                }
            }
            stopwatch.Stop();
            var statisticsText = $"Elapsed time: {stopwatch.Elapsed.TotalMilliseconds}ms";

            SqlUtil.WriteLog(destinationTableName, "SqlBulkCopy", null, statisticsText);
            if (stopwatch.Elapsed.TotalMilliseconds >= BaseSystemInfo.SlowQueryMilliseconds)
            {
                var sb = Pool.StringBuilder.Get();
                sb.Append("SqlBulkCopy to Table " + destinationTableName + " , " + statisticsText);
                LogUtil.WriteLog(sb.Put(), "Slow.DbHelper.SqlBulkCopy");
            }

            return(result);
        }
예제 #22
0
        /// <summary>
        /// 导出高版本Excel格式文件(NPOI组件方式)
        /// </summary>
        /// <param name="dt">数据表</param>
        /// <param name="fieldList">数据表字段名-说明对应列表</param>
        /// <param name="fileName">文件名</param>
        /// <param name="exportPicture">是否导出图片</param>
        public static void ExportXlsxByNpoi(DataTable dt, Dictionary <string, string> fieldList, string fileName, bool exportPicture = false)
        {
            var fs = new FileStream(fileName, FileMode.Create, FileAccess.Write);
            var ms = new MemoryStream();
            //创建工作簿
            var workbook = new XSSFWorkbook();
            //创建表
            var sheet = workbook.CreateSheet("Sheet1");
            //创建表头
            var headerRow = sheet.CreateRow(0);

            // 写出表头
            if (fieldList == null)
            {
                for (var i = 0; i < dt.Columns.Count; i++)
                {
                    //增加了try Catch,解决字典fieldList中没有table列中项时,会出错。
                    //此处采用跳过的方式,表现方式是此列的表头没值
                    try
                    {
                        headerRow.CreateCell(i).SetCellValue(dt.Columns[i].ColumnName);
                    }
                    catch (Exception ex)
                    {
                        LogUtil.WriteException(ex);
                        continue;
                    }
                }
            }
            else
            {
                var j = 0;
                foreach (var field in fieldList)
                {
                    try
                    {
                        headerRow.CreateCell(j).SetCellValue(field.Value);
                        j++;
                    }
                    catch (Exception ex)
                    {
                        LogUtil.WriteException(ex);
                        continue;
                    }
                }
            }
            // 行索引号
            var rowIndex   = 1;
            var hasPicture = false;

            // 写出数据
            foreach (DataRow dtRow in dt.Rows)
            {
                var dataRow = sheet.CreateRow(rowIndex);
                if (fieldList == null)
                {
                    for (var i = 0; i < dt.Columns.Count; i++)
                    {
                        try
                        {
                            switch (dt.Columns[i].DataType.ToString())
                            {
                            case "System.String":
                            default:
                                //获取后缀名
                                var filePath = Convert.ToString(Convert.IsDBNull(dtRow[i]) ? "" : dtRow[i]);
                                var suffix   = filePath.Substring(
                                    filePath.LastIndexOf('.') + 1,
                                    filePath.Length - filePath.LastIndexOf('.') - 1
                                    );
                                hasPicture = false;
                                if (exportPicture &&
                                    (suffix.Equals("jpg", StringComparison.OrdinalIgnoreCase) || suffix.Equals("bmp", StringComparison.OrdinalIgnoreCase) || suffix.Equals("jpeg", StringComparison.OrdinalIgnoreCase) || suffix.Equals("gif", StringComparison.OrdinalIgnoreCase) ||
                                     suffix.Equals("png", StringComparison.OrdinalIgnoreCase)))
                                {
                                    hasPicture = true;
                                    //正方形的例子50*20 x 10*256
                                    dataRow.Height = 100 * 20;
                                    sheet.SetColumnWidth(i, 20 * 256);
                                    AddPicture(workbook, sheet, filePath, rowIndex, i, suffix);
                                }
                                else
                                {
                                    dataRow.CreateCell(i).SetCellValue(
                                        Convert.ToString(Convert.IsDBNull(dtRow[i]) ? "" : dtRow[i])
                                        );
                                }
                                break;

                            case "System.DateTime":
                                dataRow.CreateCell(i).SetCellValue(
                                    Convert.ToString(Convert.IsDBNull(dtRow[i])
                                            ? ""
                                            : DateTime.Parse(dtRow[i].ToString())
                                                     .ToString(BaseSystemInfo.DateTimeFormat)));
                                break;

                            case "System.Int16":
                            case "System.Int32":
                            case "System.Int64":
                            case "System.Decimal":
                            case "System.Double":
                                dataRow.CreateCell(i).SetCellValue(
                                    Convert.ToDouble(Convert.IsDBNull(dtRow[i]) ? 0 : dtRow[i])
                                    );
                                break;
                            }
                            //列宽自适应会造成导出图片出问题
                            if (exportPicture && hasPicture && sheet.GetColumnWidth(i) != 20 * 256)
                            {
                                sheet.AutoSizeColumn(i);
                            }
                        }
                        catch (Exception ex)
                        {
                            LogUtil.WriteException(ex);
                            continue;
                        }
                    }
                }
                else
                {
                    var i = 0;
                    foreach (var field in fieldList)
                    //for (int i = 0; i < dt.Columns.Count; i++)
                    {
                        try
                        {
                            switch (dt.Columns[field.Key].DataType.ToString())
                            {
                            case "System.String":
                            default:
                                //获取后缀名
                                var filePath = Convert.ToString(Convert.IsDBNull(dtRow[field.Key]) ? "" : dtRow[field.Key]);
                                var suffix   = filePath.Substring(
                                    filePath.LastIndexOf('.') + 1,
                                    filePath.Length - filePath.LastIndexOf('.') - 1
                                    );
                                hasPicture = false;
                                if (exportPicture && (suffix.Equals("jpg", StringComparison.OrdinalIgnoreCase) || suffix.Equals("bmp", StringComparison.OrdinalIgnoreCase) || suffix.Equals("jpeg", StringComparison.OrdinalIgnoreCase) || suffix.Equals("gif", StringComparison.OrdinalIgnoreCase) || suffix.Equals("png", StringComparison.OrdinalIgnoreCase)))
                                {
                                    hasPicture = true;
                                    //正方形的例子50*20 x 10*256
                                    dataRow.Height = 100 * 20;
                                    sheet.SetColumnWidth(i, 20 * 256);
                                    AddPicture(workbook, sheet, filePath, rowIndex, i, suffix);
                                    //sheet.GetColumnWidth(i);
                                }
                                else
                                {
                                    dataRow.CreateCell(i).SetCellValue(
                                        Convert.ToString(Convert.IsDBNull(dtRow[field.Key]) ? "" : dtRow[field.Key])
                                        );
                                }
                                break;

                            case "System.DateTime":
                                dataRow.CreateCell(i).SetCellValue(
                                    Convert.ToString(Convert.IsDBNull(dtRow[field.Key]) ? "" : DateTime.Parse(dtRow[field.Key].ToString()).ToString(BaseSystemInfo.DateTimeFormat)));
                                break;

                            case "System.Int16":
                            case "System.Int32":
                            case "System.Int64":
                            case "System.Decimal":

                            case "System.Double":
                                dataRow.CreateCell(i).SetCellValue(
                                    Convert.ToDouble(Convert.IsDBNull(dtRow[field.Key]) ? 0 : dtRow[field.Key])
                                    );
                                break;
                            }
                            //列宽自适应会造成导出图片出问题
                            if (exportPicture && hasPicture && sheet.GetColumnWidth(i) != 20 * 256)
                            {
                                sheet.AutoSizeColumn(i);
                            }
                            i++;
                        }
                        catch (Exception ex)
                        {
                            LogUtil.WriteException(ex);
                            continue;
                        }
                    }
                }

                rowIndex++;
            }

            workbook.Write(ms);
            var data = ms.ToArray();

            ms.Flush();
            ms.Close();

            fs.Write(data, 0, data.Length);
            fs.Flush();
            fs.Close();
        }
예제 #23
0
        /// <summary>
        /// Excel row转换为实体对象
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="cellHeader">单元头的Key和Value:{ { "UserName", "姓名" }, { "Age", "年龄" } };</param>
        /// <param name="row">Excel row</param>
        /// <param name="rowIndex">row index</param>
        /// <param name="t">实体</param>
        /// <param name="errorMsg">错误信息</param>
        private static void ExcelRowToEntity <T>(Dictionary <string, string> cellHeader, IRow row, int rowIndex, T t, ref StringBuilder errorMsg)
        {
            var keys   = cellHeader.Keys.ToList(); // 要赋值的实体对象属性名称
            var errStr = "";                       // 当前行转换时,是否有错误信息,格式为:第1行数据转换异常:XXX列;

            for (var i = 0; i < keys.Count; i++)
            {
                // 1.若属性头的名称包含'.',就表示是子类里的属性,那么就要遍历子类,eg:UserEn.TrueName
                if (keys[i].IndexOf(".", StringComparison.Ordinal) >= 0)
                {
                    // 1)解析子类属性
                    var propertyArray        = keys[i].Split(new string[] { "." }, StringSplitOptions.RemoveEmptyEntries);
                    var subClassName         = propertyArray[0];                      // '.'前面的为子类的名称
                    var subClassPropertyName = propertyArray[1];                      // '.'后面的为子类的属性名称
                    var subClassInfo         = t.GetType().GetProperty(subClassName); // 获取子类的类型
                    if (subClassInfo != null)
                    {
                        // 2)获取子类的实例
                        var subClassEn = t.GetType().GetProperty(subClassName)?.GetValue(t, null);
                        // 3)根据属性名称获取子类里的属性信息
                        var propertyInfo = subClassInfo.PropertyType.GetProperty(subClassPropertyName);
                        if (propertyInfo != null)
                        {
                            try
                            {
                                // Excel单元格的值转换为对象属性的值,若类型不对,记录出错信息
                                propertyInfo.SetValue(subClassEn, GetExcelCellToProperty(propertyInfo.PropertyType, row.GetCell(i)), null);
                            }
                            catch (Exception ex)
                            {
                                LogUtil.WriteException(ex);
                                if (errStr.Length == 0)
                                {
                                    errStr = "第" + rowIndex + "行数据转换异常:";
                                }
                                errStr += cellHeader[keys[i]] + "列;";
                            }
                        }
                    }
                }
                else
                {
                    // 2.给指定的属性赋值
                    var propertyInfo = t.GetType().GetProperty(keys[i]);
                    if (propertyInfo != null)
                    {
                        try
                        {
                            // Excel单元格的值转换为对象属性的值,若类型不对,记录出错信息
                            propertyInfo.SetValue(t, GetExcelCellToProperty(propertyInfo.PropertyType, row.GetCell(i)), null);
                        }
                        catch (Exception ex)
                        {
                            LogUtil.WriteException(ex);
                            if (errStr.Length == 0)
                            {
                                errStr = "第" + rowIndex + "行数据转换异常:";
                            }
                            errStr += cellHeader[keys[i]] + "列;";
                        }
                    }
                }
            }
            // 若有错误信息,就添加到错误信息里
            if (errStr.Length > 0)
            {
                errorMsg.AppendLine(errStr);
            }
        }
예제 #24
0
        /// <summary>
        /// 通过DataTable获得CSV格式数据
        /// </summary>
        /// <param name="dt">数据表</param>
        /// <param name="fieldList">字段列表字典(字段,描述)</param>
        /// <param name="separator">分隔符</param>
        /// <returns>CSV字符串数据</returns>
        private static StringBuilder GetCsvFormatData(DataTable dt, Dictionary <string, string> fieldList = null, string separator = ",")
        {
            var sb = Pool.StringBuilder.Get();

            #region 检查字段列表

            if (dt != null && fieldList != null)
            {
                var keys = fieldList.Keys.ToArray();
                for (var i = 0; i < keys.Length; i++)
                {
                    var hasColumnName = false;
                    foreach (DataColumn dc in dt.Columns)
                    {
                        if (dc.ColumnName.Equals(keys[i], StringComparison.OrdinalIgnoreCase))
                        {
                            hasColumnName = true;
                            break;
                        }
                    }
                    if (!hasColumnName)
                    {
                        //表内不存在此字段,就不要输出这个列了
                        fieldList.Remove(keys[i]);
                    }
                }
            }

            #endregion

            #region 生成dt新表

            if (dt != null && fieldList != null && fieldList.Count > 0)
            {
                //对DataTable筛选指定字段,并保存为新表
                //这些列名,确保DataTable中存在,否则会报错误
                var dtNew = dt.DefaultView.ToTable(false, fieldList.Keys.ToArray());
                dt = new DataTable();
                dt = dtNew.Copy();
            }

            #endregion

            #region 写出表头

            if (dt != null)
            {
                foreach (DataColumn dc in dt.Columns)
                {
                    if (sb.Length > 0 && (fieldList == null || (fieldList != null && fieldList.ContainsKey(dc.ColumnName))))
                    {
                        sb.Append(separator);
                    }
                    if (fieldList == null || fieldList?.Count == 0)
                    {
                        WriteSpecialCharacter(dc.ColumnName, sb, separator);
                    }
                    else
                    {
                        if (fieldList.ContainsKey(dc.ColumnName))
                        {
                            WriteSpecialCharacter(dc.ColumnName, sb, separator);
                        }
                    }
                }
                if (dt.Rows.Count > 0)
                {
                    sb.Append("\n");
                }
            }
            #endregion

            #region 写出数据
            if (dt != null && dt.Rows.Count > 0)
            {
                var c = 1;
                foreach (DataRowView drv in dt.DefaultView)
                {
                    var i = 1;
                    //var j = 1;
                    try
                    {
                        foreach (DataColumn dc in dt.Columns)
                        {
                            //j++;
                            if (fieldList == null || fieldList?.Count == 0)
                            {
                                WriteSpecialCharacter(drv[dc.ColumnName]?.ToString(), sb, separator);
                                if (i < dt.Columns.Count)
                                {
                                    sb.Append(separator);
                                }
                                i++;
                                //LogUtil.WriteLog(j + "," + i + "," + dt.Columns.Count + "," + fieldList?.Count + "," + dc.ColumnName + ":" + drv[dc.ColumnName]?.ToString());
                            }
                            else
                            {
                                if (fieldList.ContainsKey(dc.ColumnName))
                                {
                                    i++;
                                    WriteSpecialCharacter(drv[dc.ColumnName]?.ToString(), sb, separator);
                                    if (i < fieldList.Count)
                                    {
                                        sb.Append(separator);
                                    }
                                }
                                //LogUtil.WriteLog(j + "," + i + "," + dt.Columns.Count + "," + fieldList?.Count + ":" + drv[dc.ColumnName]?.ToString());
                            }
                        }
                        //最后一行不需要输出换行符
                        if (c < dt.Rows.Count)
                        {
                            sb.Append("\n");
                        }
                    }
                    catch (Exception ex)
                    {
                        LogUtil.WriteException(ex);
                        continue;
                    }
                    finally
                    {
                        c++;
                    }
                }
            }

            #endregion

            return(sb);
        }
예제 #25
0
        /// <summary>
        /// 同步发送邮件
        /// </summary>
        /// <param name="to">收件人邮箱地址(多个用英文,或;分割)</param>
        /// <param name="subject">主题</param>
        /// <param name="body">内容</param>
        /// <param name="attachmentPaths">附件路径</param>
        /// <param name="encoding">编码</param>
        /// <param name="isBodyHtml">是否Html</param>
        /// <returns>是否成功</returns>
        public static bool Send(string to, string subject, string body, string attachmentPaths = null, string encoding = "UTF-8", bool isBodyHtml = true)
        {
            var result = false;

            if (!string.IsNullOrEmpty(to))
            {
                try
                {
                    if (BaseSystemInfo.MailServerSslEnabled && BaseSystemInfo.MailServerPort == 465)
                    {
#if NET40_OR_GREATER
                        var message = new System.Web.Mail.MailMessage();
                        //接收人邮箱地址
                        message.To = to;

                        if (!string.IsNullOrEmpty(BaseSystemInfo.MailBcc))
                        {
                            message.Bcc = BaseSystemInfo.MailBcc;
                        }

                        if (!string.IsNullOrEmpty(BaseSystemInfo.MailFrom))
                        {
                            message.From = BaseSystemInfo.MailFrom;
                        }

                        //在有附件的情况下添加附件
                        if (!string.IsNullOrEmpty(attachmentPaths))
                        {
                            message.Attachments.Clear();
                            try
                            {
                                string[] attachPath = attachmentPaths.Split(';');
                                System.Web.Mail.MailAttachment attachFile = null;
                                foreach (string path in attachPath)
                                {
                                    //string extName = Path.GetExtension(path).ToLower(); //获取扩展名
                                    //FileStream fs = new FileStream(HostingEnvironment.MapPath("/") + pathFileName, FileMode.Open, FileAccess.Read);
                                    ////将附件添加到mailmessage对象
                                    //attachment = new Attachment(fs, dictionary[i]);
                                    attachFile = new System.Web.Mail.MailAttachment(path);
                                    message.Attachments.Add(attachFile);
                                }
                            }
                            catch (Exception ex)
                            {
                                LogUtil.WriteException(ex);
                            }
                        }
                        message.BodyEncoding = Encoding.GetEncoding(encoding);
                        message.Body         = body;
                        message.Subject      = subject;
                        if (isBodyHtml)
                        {
                            message.BodyFormat = System.Web.Mail.MailFormat.Html;
                        }

                        message.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate", "1");
                        message.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendusername", BaseSystemInfo.MailUserName);
                        message.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendpassword", BaseSystemInfo.MailPassword);
                        message.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpserverport", BaseSystemInfo.MailServerPort);//端口
                        message.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpusessl", BaseSystemInfo.MailServerSslEnabled);

                        System.Web.Mail.SmtpMail.SmtpServer = BaseSystemInfo.MailServer;
                        System.Web.Mail.SmtpMail.Send(message);
#endif
                    }
                    else
                    {
                        var message = new MailMessage();
                        //接收人邮箱地址
                        if (!to.Contains(",") && !to.Contains(";"))
                        {
                            message.To.Add(new MailAddress(to));
                        }
                        else if (!string.IsNullOrWhiteSpace(to))
                        {
                            string[] tos = null;
                            if (to.Contains(","))
                            {
                                tos = to.Split(",".ToCharArray());
                            }
                            else if (to.Contains(";"))
                            {
                                tos = to.Split(";".ToCharArray());
                            }

                            foreach (var t in tos)
                            {
                                message.To.Add(new MailAddress(t));
                            }
                        }

                        if (!string.IsNullOrEmpty(BaseSystemInfo.MailBcc))
                        {
                            message.Bcc.Add(new MailAddress(BaseSystemInfo.MailBcc));
                        }

                        if (!string.IsNullOrEmpty(BaseSystemInfo.MailFrom))
                        {
                            message.From = new MailAddress(BaseSystemInfo.MailFrom);
                        }

                        //在有附件的情况下添加附件
                        if (!string.IsNullOrEmpty(attachmentPaths))
                        {
                            message.Attachments.Clear();
                            try
                            {
                                string[]   attachPath = attachmentPaths.Split(';');
                                Attachment attachFile = null;
                                foreach (string path in attachPath)
                                {
                                    //string extName = Path.GetExtension(path).ToLower(); //获取扩展名
                                    //FileStream fs = new FileStream(HostingEnvironment.MapPath("/") + pathFileName, FileMode.Open, FileAccess.Read);
                                    ////将附件添加到mailmessage对象
                                    //attachment = new Attachment(fs, dictionary[i]);
                                    attachFile = new Attachment(path);
                                    message.Attachments.Add(attachFile);
                                }
                            }
                            catch (Exception ex)
                            {
                                LogUtil.WriteException(ex);
                            }
                        }
                        message.BodyEncoding    = Encoding.GetEncoding(encoding);
                        message.Body            = body;
                        message.SubjectEncoding = Encoding.GetEncoding(encoding);
                        message.Subject         = subject;
                        message.IsBodyHtml      = isBodyHtml;

                        var smtpClient = new SmtpClient(BaseSystemInfo.MailServer, BaseSystemInfo.MailServerPort)
                        {
                            Credentials = new NetworkCredential(BaseSystemInfo.MailUserName, BaseSystemInfo.MailPassword),
                            //SSL设置
                            EnableSsl = BaseSystemInfo.MailServerSslEnabled
                        };

                        smtpClient.Send(message);
                    }

                    result = true;
                }
#if NET40_OR_GREATER
                catch (System.Web.HttpException ex)
                {
                    LogUtil.WriteException(ex);
                }
#endif
                catch (SmtpException ex)
                {
                    LogUtil.WriteException(ex);
                }
                catch (Exception ex)
                {
                    LogUtil.WriteException(ex);
                }
            }

            return(result);
        }
예제 #26
0
        /// <summary>
        /// 保存接口返回二进制流为文件方法
        /// </summary>
        /// <param name="requestUri">接口地址</param>
        /// <param name="jsonString">json数据对象</param>
        /// <returns></returns>
        public static string DownloadBufferImage(string requestUri, string jsonString)
        {
            var result = string.Empty;

            try
            {
                HttpContent httpContent = new StringContent(jsonString);
                httpContent.Headers.ContentType = new MediaTypeHeaderValue("application/json");

                //注意大量并发的时候不能释放资源的问题
                using (var httpClient = new HttpClient())
                {
                    //停止使用using,使用HttpClientFactory
                    //var httpClient = HttpClientFactory2.GetHttpClient();

                    httpClient.PostAsync(requestUri, httpContent).ContinueWith(
                        (requestTask) =>
                    {
                        var response = requestTask.Result;

                        response.EnsureSuccessStatusCode();

                        var contentType = response.Content.Headers.ContentType;
                        if (string.IsNullOrEmpty(contentType.CharSet))
                        {
                            contentType.CharSet = "utf-8";
                        }
                        LogUtil.WriteLog(response.Content.ReadAsByteArrayAsync().Result.LongLength.ToString(), "QRCode");

                        var data = response.Content.ReadAsByteArrayAsync().Result;

                        var fileName = string.Empty;

                        //会出现113个字节的内容,所以放大十倍
                        if (data.Length > 1130)
                        {
                            fileName     = Guid.NewGuid().ToString("D") + ".jpg";
                            var filePath = string.Format(@"{0}\QRCode\" + fileName, AppDomain.CurrentDomain.BaseDirectory);

                            var folder = Path.GetDirectoryName(filePath);
                            if (!Directory.Exists(folder))
                            {
                                Directory.CreateDirectory(folder);
                            }

                            using (var fs = new FileStream(filePath, FileMode.Create, FileAccess.Write))
                            {
                                fs.Write(data, 0, data.Length);
                                fs.Flush();
                                fs.Close();
                            }

                            result = "/QRCode/" + fileName;
                        }
                        else
                        {
                            LogUtil.WriteLog(Encoding.Default.GetString(data), "QRCode");
                        }
                    }).Wait(5000);
                }
            }
            catch (Exception ex)
            {
                LogUtil.WriteException(ex);
            }
            return(result);
        }
예제 #27
0
        /// <summary>
        /// 填充数据权限
        /// </summary>
        /// <param name="dataSet">数据权限</param>
        /// <param name="commandType">命令分类</param>
        /// <param name="commandText">sql查询</param>
        /// <param name="tableName">填充表</param>
        /// <param name="dbParameters">参数集</param>
        /// <returns>数据权限</returns>
        public virtual DataSet Fill(DataSet dataSet, string commandText, string tableName, IDbDataParameter[] dbParameters, CommandType commandType)
        {
            var stopwatch = new Stopwatch();

            stopwatch.Start();

            // 自动打开
            MustCloseConnection = true;
            if (DbConnection == null)
            {
                Open();
            }
            if (DbConnection.State == ConnectionState.Closed)
            {
                DbConnection.Open();
            }
            else if (DbConnection.State == ConnectionState.Broken)
            {
                DbConnection.Close();
                DbConnection.Open();
            }
            using (DbCommand = DbConnection.CreateCommand())
            {
                try
                {
#if (DEBUG)
                    Trace.WriteLine(DateTime.Now + " :DbConnection Start: " + DbConnection.Database + " ,ThreadId: " + Thread.CurrentThread.ManagedThreadId);
#endif
                    //dbCommand.Parameters.Clear();
                    //if ((dbParameters != null) && (dbParameters.Length > 0))
                    //{
                    //    for (int i = 0; i < dbParameters.Length; i++)
                    //    {
                    //        if (dbParameters[i] != null)
                    //        {
                    //            dbDataAdapter.SelectCommand.Parameters.Add(dbParameters[i]);
                    //        }
                    //    }
                    //}
                    DbCommand.Connection     = DbConnection;
                    DbCommand.CommandTimeout = DbConnection.ConnectionTimeout;
                    DbCommand.CommandText    = commandText;
                    if (CurrentDbType == CurrentDbType.Oracle)
                    {
                        // 针对Oracle,全局替换换行符,避免报错或不执行
                        // 仅当前系统的换行符
                        DbCommand.CommandText = commandText.Replace(Environment.NewLine, " ");
                        // 各种平台的换行符
                        //_dbCommand.CommandText = commandText.Replace("r\n", " ").Replace('\n', ' ').Replace('\r', ' ');
                    }

                    DbCommand.CommandType = commandType;
                    if (_dbTransaction != null)
                    {
                        DbCommand.Transaction = _dbTransaction;
                    }
                    DbCommand.Parameters.Clear();
                    if ((dbParameters != null) && (dbParameters.Length > 0))
                    {
                        for (var i = 0; i < dbParameters.Length; i++)
                        {
                            if (dbParameters[i] != null)
                            {
                                DbCommand.Parameters.Add(((ICloneable)dbParameters[i]).Clone());
                            }
                        }
                        // dbCommand.Parameters.AddRange(dbParameters);
                    }

                    //记录日志
                    SqlUtil.WriteLog(commandText, commandType.ToString(), dbParameters);

                    DbDataAdapter = GetInstance().CreateDataAdapter();
                    DbDataAdapter.SelectCommand = DbCommand;
                    if (DbConnection.State != ConnectionState.Open)
                    {
                        DbConnection.Open();
                    }
                    DbDataAdapter.Fill(dataSet, tableName);

                    SetBackParamValue(dbParameters);
                }
                catch (Exception e)
                {
                    //Troy.Cui 2020.05.13
                    dataSet = null;
                    //记录异常
                    var sb = Pool.StringBuilder.Get();
                    sb.Append(commandText);
                    sb.Append(" ");
                    sb.Append(tableName);
                    sb.Append(" ");
                    sb.Append(commandType.ToString());
                    if (dbParameters != null)
                    {
                        sb.Append(" dbParameters: ");
                        foreach (var parameter in dbParameters)
                        {
                            sb.Append(parameter.ParameterName + "=" + parameter.Value + " ");
                        }
                    }

                    LogUtil.WriteException(e, sb.Put());
                }
                finally
                {
                    if (MustCloseConnection)
                    {
                        Close();
                    }
                    else
                    {
                        DbDataAdapter?.SelectCommand.Parameters.Clear();
                    }
                }

                stopwatch.Stop();
                var statisticsText = $"Elapsed time: {stopwatch.Elapsed.TotalMilliseconds}ms";
                SqlUtil.WriteLog(commandText, commandType.ToString(), dbParameters, statisticsText);
                if (stopwatch.Elapsed.TotalMilliseconds >= BaseSystemInfo.SlowQueryMilliseconds)
                {
                    var sb = Pool.StringBuilder.Get();
                    sb.Append(commandText);
                    sb.Append(" ");
                    sb.Append(tableName);
                    sb.Append(" ");
                    sb.Append(commandType.ToString());
                    if (dbParameters != null)
                    {
                        sb.Append(" dbParameters: ");
                        foreach (var parameter in dbParameters)
                        {
                            sb.Append(parameter.ParameterName + "=" + parameter.Value + " ");
                        }
                    }
                    else
                    {
                        sb.Append(" ");
                    }
                    sb.Append(statisticsText);
                    LogUtil.WriteLog(sb.Put(), "Slow.DbHelper.Fill");
                }
            }
            return(dataSet);
        }
예제 #28
0
        /// <summary>
        /// 执行查询
        /// </summary>
        /// <param name="commandText">sql查询</param>
        /// <param name="dbParameters">参数集</param>
        /// <param name="commandType">命令分类</param>
        /// <returns>结果集流</returns>
        public virtual IDataReader ExecuteReader(string commandText, IDbDataParameter[] dbParameters, CommandType commandType)
        {
            var stopwatch = new Stopwatch();

            stopwatch.Start();
            //自动打开
            MustCloseConnection = false;
            if (DbConnection == null)
            {
                Open();
            }

            DbDataReader dbDataReader = null;

            if (DbConnection.State == ConnectionState.Closed)
            {
                DbConnection.Open();
            }
            else if (DbConnection.State == ConnectionState.Broken)
            {
                DbConnection.Close();
                DbConnection.Open();
            }
            using (DbCommand = DbConnection.CreateCommand())
            {
                try
                {
#if (DEBUG)
                    Trace.WriteLine(DateTime.Now + " :DbConnection Start: " + DbConnection.Database + " ,ThreadId: " + Thread.CurrentThread.ManagedThreadId);
#endif
                    DbCommand.Connection     = DbConnection;
                    DbCommand.CommandTimeout = DbConnection.ConnectionTimeout;
                    DbCommand.CommandText    = commandText;
                    if (CurrentDbType == CurrentDbType.Oracle)
                    {
                        // 针对Oracle,全局替换换行符,避免报错或不执行
                        // 仅当前系统的换行符
                        DbCommand.CommandText = commandText.Replace(Environment.NewLine, " ");
                        // 各种平台的换行符
                        //_dbCommand.CommandText = commandText.Replace("r\n", " ").Replace('\n', ' ').Replace('\r', ' ');
                    }

                    DbCommand.CommandType = commandType;
                    if (_dbTransaction != null)
                    {
                        DbCommand.Transaction = _dbTransaction;
                    }

                    if (dbParameters != null)
                    {
                        DbCommand.Parameters.Clear();
                        foreach (var t in dbParameters)
                        {
                            if (t != null)
                            {
                                DbCommand.Parameters.Add(((ICloneable)t).Clone());
                            }
                        }
                    }

                    // 写入日志
                    SqlUtil.WriteLog(commandText, commandType.ToString(), dbParameters);
                    if (DbConnection.State != ConnectionState.Open)
                    {
                        DbConnection.Open();
                    }
                    dbDataReader = DbCommand.ExecuteReader(CommandBehavior.CloseConnection);
                }
                catch (Exception e)
                {
                    var sb = Pool.StringBuilder.Get();
                    sb.Append(commandText);
                    sb.Append(" ");
                    sb.Append(commandType.ToString());
                    if (dbParameters != null)
                    {
                        sb.Append(" dbParameters: ");
                        foreach (var parameter in dbParameters)
                        {
                            sb.Append(parameter.ParameterName + "=" + parameter.Value + " ");
                        }
                    }

                    LogUtil.WriteException(e, sb.Put());
                }
                finally
                {
                    //因为使用了CommandBehavior.CloseConnection,不需要关闭连接
                    //一定不要自动关闭连接,但需要在dataReader.Read()之后手动执行dataReader.Close()
                    //if (MustCloseConnection)
                    //{
                    //    Close();
                    //}
                    if (DbCommand != null)
                    {
                        DbCommand.Parameters.Clear();
                    }
                }
                stopwatch.Stop();
                var statisticsText = $"Elapsed time: {stopwatch.Elapsed.TotalMilliseconds}ms";
                SqlUtil.WriteLog(commandText, commandType.ToString(), dbParameters, statisticsText);
                if (stopwatch.Elapsed.TotalMilliseconds >= BaseSystemInfo.SlowQueryMilliseconds)
                {
                    var sb = Pool.StringBuilder.Get();
                    sb.Append(commandText);
                    sb.Append(" ");
                    sb.Append(commandType.ToString());
                    if (dbParameters != null)
                    {
                        sb.Append(" dbParameters: ");
                        foreach (var parameter in dbParameters)
                        {
                            sb.Append(parameter.ParameterName + "=" + parameter.Value + " ");
                        }
                    }
                    else
                    {
                        sb.Append(" ");
                    }
                    sb.Append(statisticsText);
                    LogUtil.WriteLog(sb.Put(), "Slow.DbHelper.ExecuteReader");
                }
            }

            return(dbDataReader);
        }