• Utility 工具类


    using System;
    using System.Collections.Specialized;
    using System.IO;
    using System.Net;
    using System.Text;
    using System.Text.RegularExpressions;
    using System.Collections.Generic;
    using System.Configuration;
    using System.Data;
    using System.Data.SqlClient;
    using System.Security.Cryptography.X509Certificates;
    using System.Net.Security;
    using System.Reflection;
    using System.ComponentModel;
    
    namespace DBUtility
    {
       public class DButility
        {
            private static Random ran = new Random();
            private static readonly int TIMEOUT = 5000;
            #region DBNull类型转换
            public static long ToInt64(object value)
            {
                return (Convert.IsDBNull(value)) ? 0 : Convert.ToInt64(value);
            }
    
            public static int ToInt32(object value)
            {
                return (Convert.IsDBNull(value)) ? 0 : Convert.ToInt32(value);
            }
    
            public static short ToInt16(object value)
            {
                return (Convert.IsDBNull(value)) ? (short)0 : Convert.ToInt16(value);
            }
    
            public static string ToString(object value)
            {
                return value.ToString();
            }
    
            public static decimal ToDecimal(object value)
            {
                return (Convert.IsDBNull(value)) ? 0 : Convert.ToDecimal(value);
            }
    
            public static DateTime ToDateTime(object value)
            {
                return (Convert.IsDBNull(value)) ? DateTime.MinValue : Convert.ToDateTime(value);
            }
            #endregion
    
            #region AES 加密/解密
            /// <summary>
            ///  AES 加密
            /// </summary>
            /// <param name="str">明文(待加密)</param>
            /// <param name="key">密文</param>
            /// <returns></returns>
            public static string AesEncryptToHex(string str, string key)
            {
                if (string.IsNullOrEmpty(str)) return null;
                Byte[] toEncryptArray = Encoding.UTF8.GetBytes(str);   //命名空间: using System.Text;
    
                System.Security.Cryptography.RijndaelManaged rm = new System.Security.Cryptography.RijndaelManaged
                {
                    Key = Encoding.UTF8.GetBytes(key),
                    Mode = System.Security.Cryptography.CipherMode.ECB,
                    Padding = System.Security.Cryptography.PaddingMode.PKCS7
                };
    
                System.Security.Cryptography.ICryptoTransform cTransform = rm.CreateEncryptor();
                Byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length);
    
                var hex = BitConverter.ToString(resultArray, 0).Replace("-", string.Empty).ToLower();
                return hex;
            }
    
            /// <summary>
            ///  AES 解密
            /// </summary>
            /// <param name="str">明文(待解密)</param>
            /// <param name="key">密文</param>
            /// <returns></returns>
            public static string AesDecryptFromHex(string str, string key)
            {
                if (string.IsNullOrEmpty(str)) return null;
                var toEncryptArray = new byte[str.Length / 2];
                for (var x = 0; x < toEncryptArray.Length; x++)
                {
                    var i = Convert.ToInt32(str.Substring(x * 2, 2), 16);
                    toEncryptArray[x] = (byte)i;
                }
    
                //Byte[] toEncryptArray = Convert.FromBase64String(str);
    
                System.Security.Cryptography.RijndaelManaged rm = new System.Security.Cryptography.RijndaelManaged
                {
                    Key = Encoding.UTF8.GetBytes(key),
                    Mode = System.Security.Cryptography.CipherMode.ECB,
                    Padding = System.Security.Cryptography.PaddingMode.PKCS7
                };
    
                System.Security.Cryptography.ICryptoTransform cTransform = rm.CreateDecryptor();
                Byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length);
    
                return Encoding.UTF8.GetString(resultArray);
            }
            #endregion
    
            #region 获取时间戳,取随机数
            /// <summary>
            /// 获取时间戳
            /// </summary>
            /// <returns></returns>
            public static long GetTimeStamp()
            {
                TimeSpan ts = DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, 0);
                return Convert.ToInt64(ts.TotalSeconds);
            }
    
            /// <summary>
            /// 取随机数
            /// </summary>
            /// <param name="min"></param>
            /// <param name="max"></param>
            /// <returns></returns>
            public static int GetRandom(int min, int max)
            {
                return ran.Next(min, max);
            }
    
            /// <summary>
            /// 获取当前本地时间戳
            /// </summary>
            /// <returns></returns>
            public static long GetCurrentTimeUnix()
            {
                TimeSpan cha = (DateTime.Now - TimeZone.CurrentTimeZone.ToLocalTime(new System.DateTime(1970, 1, 1)));
                long t = (long)cha.TotalSeconds;
                return t;
            }
    
            /// <summary>
            /// 时间戳转换为本地时间对象
            /// </summary>
            /// <returns></returns>
            public static DateTime GetUnixDateTime(long unix)
            {
                //long unix = 1500863191;
                DateTime dtStart = TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970, 1, 1));
                DateTime newTime = dtStart.AddSeconds(unix);
                return newTime;
            }
    
            /// <summary>
            /// Unicode转字符串
            /// </summary>
            /// <param name="source">经过Unicode编码的字符串</param>
            /// <returns>正常字符串</returns>
            public static string UnicodeToString(string source)
            {
                return new Regex(@"\u([0-9A-F]{4})", RegexOptions.IgnoreCase | RegexOptions.Compiled).Replace(
                             source, x => string.Empty + Convert.ToChar(Convert.ToUInt16(x.Result("$1"), 16)));
            }
    
            /// <summary>
            /// Stream流转化为字符串
            /// </summary>
            /// <returns></returns>
            public static string StreamToString(Stream stream)
            {
                if (stream == null || stream.Length == 0)
                {
                    return string.Empty;
                }
                StreamReader sr = new StreamReader(stream);
                return sr.ReadToEnd();
            }
    
            /// <summary>
            /// RequestForm转换成String, key=value格式
            /// </summary>
            /// <returns></returns>
            public static string RequestFormToString(NameValueCollection form)
            {
                if (form == null)
                {
                    return null;
                }
    
                string strTemp = string.Empty;
    
                String[] requestItem = form.AllKeys;
                for (int i = 0; i < requestItem.Length; i++)
                {
                    strTemp += requestItem[i] + "=" + form[requestItem[i]] + "&";
                }
    
                strTemp = strTemp.TrimEnd('&');
                return strTemp;
            }
            #endregion
    
            #region HttpUtils
    
            public static string HttpPost(string Url, string mobiles, string content)
            {
                string postData = string.Format("mobiles={0}&content={1}", mobiles, content);
    
                HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Url);
                System.Net.ServicePointManager.DefaultConnectionLimit = 200;
                request.Method = "POST";
                request.KeepAlive = false;
                request.ContentType = "application/x-www-form-urlencoded";
                request.ContentLength = Encoding.UTF8.GetByteCount(postData);
                Stream myRequestStream = request.GetRequestStream();
                StreamWriter myStreamWriter = new StreamWriter(myRequestStream, Encoding.GetEncoding("gb2312"));
                myStreamWriter.Write(postData, 0, postData.Length);
                myStreamWriter.Close();
                HttpWebResponse response = (HttpWebResponse)request.GetResponse();
    
                Stream myResponseStream = response.GetResponseStream();
                StreamReader myStreamReader = new StreamReader(myResponseStream, Encoding.GetEncoding("utf-8"));
                string retString = myStreamReader.ReadToEnd();
                myStreamReader.Close();
    
                myResponseStream.Close();
    
                response = null;
                request = null;
                return retString;
            }
    
    
    
            /// <summary>  
            /// 指定Post地址使用Get 方式获取全部字符串  
            /// </summary>  
            /// <param name="url">请求后台地址</param>  
            /// <returns></returns>  
            public static string Post(string url, Dictionary<string, string> dic)
            {
                string result = "";
                HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
                string mobiles = dic["mobiles"];
                string content = dic["content"];
                req.Method = "POST";
                req.ContentType = "application/x-www-form-urlencoded";
                #region 添加Post 参数
                StringBuilder builder = new StringBuilder();
                int i = 0;
                foreach (var item in dic)
                {
                    if (i > 0)
                        builder.Append("&");
                    builder.AppendFormat("{0}={1}", item.Key, item.Value);
                    i++;
                }
                byte[] data = Encoding.UTF8.GetBytes(builder.ToString());
                req.ContentLength = data.Length;
                using (Stream reqStream = req.GetRequestStream())
                {
                    reqStream.Write(data, 0, data.Length);
                    reqStream.Close();
                }
                #endregion
                HttpWebResponse resp = (HttpWebResponse)req.GetResponse();
                Stream stream = resp.GetResponseStream();
                //获取响应内容  
                using (StreamReader reader = new StreamReader(stream, Encoding.UTF8))
                {
                    result = reader.ReadToEnd();
                }
                return result;
            }
    
            /// <summary>  
            /// 指定地址使用Get 方式获取全部字符串  
            /// </summary>  
            /// <param name="url">请求后台地址</param>  
            /// <returns></returns>  
            public static string Get(string url, Dictionary<string, string> dic)
            {
                string result = "";
                HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
                string uname = dic["username"];
                string pwd = dic["password"];
                req.Method = "GET";
                req.ContentType = "application/x-www-form-urlencoded";
                HttpWebResponse resp = (HttpWebResponse)req.GetResponse();
                Stream stream = resp.GetResponseStream();
                //获取响应内容  
                using (StreamReader reader = new StreamReader(stream, Encoding.UTF8))
                {
                    result = reader.ReadToEnd();
                }
                return result;
            }
    
            public static string PostSend(string url, string param)
            {
                return PostSend(url, "UTF-8", param);
            }
    
            public static string PostSend(string url, string encoding, string param, string contentType = "application/x-www-form-urlencoded")
            {
                try
                {
                    byte[] postData = Encoding.UTF8.GetBytes(param);
    
                    HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest;
                    Encoding myEncoding = Encoding.UTF8;
                    request.Method = "POST";
                    request.KeepAlive = false;
                    request.AllowAutoRedirect = true;
                    request.ContentType = contentType;
                    request.UserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; .NET CLR  3.0.04506.648; .NET CLR 3.5.21022; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)";
                    request.ContentLength = postData.Length;
                    request.Timeout = TIMEOUT;
    
                    System.IO.Stream outputStream = request.GetRequestStream();
                    outputStream.Write(postData, 0, postData.Length);
                    outputStream.Close();
    
                    HttpWebResponse response = request.GetResponse() as HttpWebResponse;
    
                    Stream responseStream = response.GetResponseStream();
    
                    StreamReader reader = new System.IO.StreamReader(responseStream, Encoding.GetEncoding("UTF-8"));
    
                    string retVal = reader.ReadToEnd();
    
                    reader.Close();
    
                    return retVal;
                }
                catch (Exception ex)
                {
                    LogHelper.Error("PostSend [url:]" + url + " [params:]" + param + " [error:]" + ex.Message);
                    return ex.Message;
                }
            }
    
            public static string PostSendWithCert(string url, string param)
            {
                return PostSendWithCert(url, "UTF-8", param);
            }
    
            public static string PostSendWithCert(string url, string encoding, string param, string contentType = "application/x-www-form-urlencoded")
            {
                try
                {
                    string cert = System.Configuration.ConfigurationManager.AppSettings["CertPath"];
                    string password = System.Configuration.ConfigurationManager.AppSettings["xcxMchId"];
                    ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(CheckValidationResult);
                    X509Certificate2 cer = new X509Certificate2(cert, password, X509KeyStorageFlags.PersistKeySet | X509KeyStorageFlags.MachineKeySet);
    
                    byte[] postData = Encoding.UTF8.GetBytes(param);
    
                    HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest;
                    Encoding myEncoding = Encoding.UTF8;
                    request.ClientCertificates.Add(cer);
                    request.Method = "POST";
                    request.KeepAlive = false;
                    request.AllowAutoRedirect = true;
                    request.ContentType = contentType;
                    request.UserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; .NET CLR  3.0.04506.648; .NET CLR 3.5.21022; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)";
                    request.ContentLength = postData.Length;
                    request.Timeout = TIMEOUT;
    
                    System.IO.Stream outputStream = request.GetRequestStream();
                    outputStream.Write(postData, 0, postData.Length);
                    outputStream.Close();
    
                    HttpWebResponse response = request.GetResponse() as HttpWebResponse;
    
                    Stream responseStream = response.GetResponseStream();
    
                    StreamReader reader = new System.IO.StreamReader(responseStream, Encoding.GetEncoding("UTF-8"));
    
                    string retVal = reader.ReadToEnd();
    
                    reader.Close();
    
                    return retVal;
                }
                catch (Exception ex)
                {
                    LogHelper.Error("PostSend [url:]" + url + " [params:]" + param + " [error:]" + ex.Message);
                    return ex.Message;
                }
            }
    
            /// <summary>
            /// 发请求获取图片到本地路径
            /// </summary>
            /// <param name="url"></param>
            /// <param name="param"></param>
            /// <param name="pathName"></param>
            /// <param name="contentType"></param>
            public static void PostSaveToFile(string url, string param, string pathName, string contentType = "application/x-www-form-urlencoded")
            {
                try
                {
                    byte[] postData = Encoding.UTF8.GetBytes(param);
    
                    HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest;
                    Encoding myEncoding = Encoding.UTF8;
                    request.Method = "POST";
                    request.KeepAlive = false;
                    request.AllowAutoRedirect = true;
                    request.ContentType = contentType;
                    request.UserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; .NET CLR  3.0.04506.648; .NET CLR 3.5.21022; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)";
                    request.ContentLength = postData.Length;
                    request.Timeout = TIMEOUT;
    
                    System.IO.Stream outputStream = request.GetRequestStream();
                    outputStream.Write(postData, 0, postData.Length);
                    outputStream.Close();
    
                    HttpWebResponse response = request.GetResponse() as HttpWebResponse;
    
                    Stream responseStream = response.GetResponseStream();
    
                    System.Drawing.Image.FromStream(responseStream).Save(pathName);
                }
                catch (Exception ex)
                {
                    LogHelper.Error("PostSend [url:]" + url + " [params:]" + param + " [error:]" + ex.Message);
                }
            }
    
            public static string HttpGet(string Url, string postDataStr = "")
            {
                try
                {
                    HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Url + (postDataStr == "" ? "" : "?") + postDataStr);
                    // https
                    if (Url.StartsWith("https", StringComparison.OrdinalIgnoreCase))
                    {
                        ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(CheckValidationResult);
                        request.ProtocolVersion = HttpVersion.Version10;
                    }
    
                    request.Method = "GET";
                    request.ContentType = "text/html;charset=UTF-8";
                    request.Timeout = 3000;
    
                    HttpWebResponse response = (HttpWebResponse)request.GetResponse();
                    Stream myResponseStream = response.GetResponseStream();
                    StreamReader myStreamReader = new StreamReader(myResponseStream, Encoding.GetEncoding("utf-8"));
                    string retString = myStreamReader.ReadToEnd();
                    myStreamReader.Close();
                    myResponseStream.Close();
    
                    return retString;
                }
                catch (Exception e)
                {
                    Console.WriteLine(e.Message);
                    return null;
                }
            }
    
            private static bool CheckValidationResult(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors errors)
            {
                return true; //总是接受  
            }
            #endregion
    
            #region MD5加密
    
            /// <summary>
            /// 
            /// </summary>
            /// <param name="sDataIn"></param>
            /// <param name="move">给空即可</param>
            /// <returns></returns>
            public static string GetMD532(string sDataIn, string move)
            {
                System.Security.Cryptography.MD5CryptoServiceProvider md5 = new System.Security.Cryptography.MD5CryptoServiceProvider();
                byte[] bytValue, bytHash;
                bytValue = System.Text.Encoding.UTF8.GetBytes(move + sDataIn);
                bytHash = md5.ComputeHash(bytValue);
                md5.Clear();
                string sTemp = "";
                for (int i = 0; i < bytHash.Length; i++)
                {
                    sTemp += bytHash[i].ToString("x").PadLeft(2, '0');
                }
                return sTemp;
            }
    
            public static string GetMD516(string ConvertString)
            {
                System.Security.Cryptography.MD5CryptoServiceProvider md5 = new System.Security.Cryptography.MD5CryptoServiceProvider();
                string t2 = BitConverter.ToString(md5.ComputeHash(UTF8Encoding.Default.GetBytes(ConvertString)), 4, 8);
                t2 = t2.Replace("-", "");
    
                t2 = t2.ToLower();
    
                return t2;
            }
            #endregion
        }
        #region log4net 日志类
        public class LogHelper
        {
            //在 <configuration></configuration>里面添加下面配置
    
            //      <configSections>
            //  <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net"/>
            //</configSections>
    
            //        <log4net>
            //  <logger name="logerror">
            //    <level value="ERROR"/>
            //    <appender-ref ref="ErrorAppender"/>
            //  </logger>
            //  <logger name="loginfo">
            //    <level value="INFO"/>
            //    <appender-ref ref="InfoAppender"/>
            //  </logger>
            //  <appender name="ErrorAppender" type="log4net.Appender.RollingFileAppender">
            //    <param name="File" value="LogError"/>
            //    <param name="AppendToFile" value="true"/>
            //    <param name="CountDirection" value="-1"/>
            //    <param name="MaxSizeRollBackups" value="15"/>
            //    <param name="MaximumFileSize" value="5MB"/>
            //    <param name="lockingModel" type="log4net.Appender.FileAppender+MinimalLock"/>
            //    <rollingStyle value="Date"/>
            //    <datePattern value="yyyyMMdd'.txt'"/>
            //    <staticLogFileName value="false"/>
            //    <layout type="log4net.Layout.PatternLayout">
            //      <conversionPattern value="%d [%t]%c %m%n"/>
            //    </layout>
            //  </appender>
            //  <appender name="InfoAppender" type="log4net.Appender.RollingFileAppender">
            //    <param name="File" value="LogInfo"/>
            //    <param name="AppendToFile" value="true"/>
            //    <param name="CountDirection" value="-1"/>
            //    <param name="MaxSizeRollBackups" value="15"/>
            //    <param name="MaximumFileSize" value="5MB"/>
            //    <param name="lockingModel" type="log4net.Appender.FileAppender+MinimalLock"/>
            //    <rollingStyle value="Date"/>
            //    <datePattern value="yyyyMMdd'.txt'"/>
            //    <staticLogFileName value="false"/>
            //    <layout type="log4net.Layout.PatternLayout">
            //      <conversionPattern value="%d [%t]%c %m%n"/>
            //    </layout>
            //  </appender>
            //</log4net>
    
    
            private static readonly log4net.ILog ILogInfo = log4net.LogManager.GetLogger("loginfo");  //添加log4net 引用
    
            public static readonly log4net.ILog ILogError = log4net.LogManager.GetLogger("logerror");
    
            public static void Info(string msg)
            {
                ILogInfo.Info(msg);
            }
    
            public static void Error(string msg)
            {
                ILogError.Error(msg);
            }
    
            /// <summary>
            /// 废弃 改用FileNameError
            /// </summary>
            /// <param name="type"></param>
            /// <param name="msg"></param>
            public static void TypeError(string type, string msg)
            {
                // eg: type=Order, msg=数据库更新失败, OrderId:111222333
                //     msg:[Order] 数据库更新失败, OrderId:111222333
                ILogError.Error("[" + type + "] " + msg);
            }
    
            public static void FileNameInfo(string fileName, string msg)
            {
                ILogInfo.Info(fileName + " " + msg);
            }
    
            public static void FileNameError(string fileName, string msg)
            {
                ILogError.Error(fileName + " " + msg);
            }
        }
        #endregion
    
        #region DataTable,DataSet,list集合 互转
        public class ModelHandler<T> where T : new()
        {
            #region DataSet=>List
            /// <summary>
            /// 填充对象列表:用DataSet的第一个表填充实体类
            /// </summary>
            /// <param name="ds">DataSet</param>
            /// <returns></returns>
            public List<T> FillModelByDataSet(DataSet ds)
            {
                if (ds == null || ds.Tables[0] == null || ds.Tables[0].Rows.Count == 0)
                {
                    return null;
                }
                else
                {
                    return FillModelByDataTable(ds.Tables[0]);
                }
            }
            #endregion
    
            #region DataTable=>List
    
    
            #region
    
            /// <summary>
            /// 类型枚举
            /// </summary>
            private enum ModelType
            {
                //值类型
                Struct,
    
                Enum,
    
                //引用类型
                String,
    
                Object,
                Else
            }
    
            private static ModelType GetModelType(Type modelType)
            {
                //值类型
                if (modelType.IsEnum)
                {
                    return ModelType.Enum;
                }
                //值类型
                if (modelType.IsValueType)
                {
                    return ModelType.Struct;
                }
                //引用类型 特殊类型处理
                if (modelType == typeof(string))
                {
                    return ModelType.String;
                }
                //引用类型 特殊类型处理
                return modelType == typeof(object) ? ModelType.Object : ModelType.Else;
            }
    
            #endregion
    
            /// <summary>  
            /// 填充对象列表:用DataTable填充实体类
            /// </summary>  
            public List<T> FillModelByDataTable(DataTable dt)
            {
                if (dt == null || dt.Rows.Count == 0)
                {
                    return null;
                }
                List<T> modelList = new List<T>();
                foreach (DataRow dr in dt.Rows)
                {
                    //T model = (T)Activator.CreateInstance(typeof(T));  
                    T model = new T();
                    for (int i = 0; i < dr.Table.Columns.Count; i++)
                    {
                        PropertyInfo propertyInfo = model.GetType().GetProperty(dr.Table.Columns[i].ColumnName);
                        if (propertyInfo != null && dr[i] != DBNull.Value)
                            propertyInfo.SetValue(model, dr[i], null);
                    }
    
                    modelList.Add(model);
                }
                return modelList;
            }
    
    
    
            /// <summary>
            /// datatable转换为List<T>集合
            /// </summary>
            /// <typeparam name="T"></typeparam>
            /// <param name="table"></param>
            /// <returns></returns>
            public static List<T> DataTableToList<T>(DataTable table)
            {
                var list = new List<T>();
                foreach (DataRow item in table.Rows)
                {
                    list.Add(DataRowToModel<T>(item));
                }
                return list;
            }
            #endregion
    
    
    
    
            #region DataRow=>Model
            /// <summary>  
            /// 填充对象:用DataRow填充实体类
            /// </summary>  
            public T FillModelByDataRow(DataRow dr)
            {
                if (dr == null)
                {
                    return default(T);
                }
    
                //T model = (T)Activator.CreateInstance(typeof(T));  
                T model = new T();
    
                for (int i = 0; i < dr.Table.Columns.Count; i++)
                {
                    PropertyInfo propertyInfo = model.GetType().GetProperty(dr.Table.Columns[i].ColumnName);
                    if (propertyInfo != null && dr[i] != DBNull.Value)
                        propertyInfo.SetValue(model, dr[i], null);
                }
                return model;
            }
    
    
            public static T DataRowToModel<T>(DataRow row)
            {
                T model;
                var type = typeof(T);
                var modelType = GetModelType(type);
                switch (modelType)
                {
                    //值类型
                    case ModelType.Struct:
                        {
                            model = default(T);
                            if (row[0] != null)
                                model = (T)row[0];
                        }
                        break;
                    //值类型
                    case ModelType.Enum:
                        {
                            model = default(T);
                            if (row[0] != null)
                            {
                                var fiType = row[0].GetType();
                                if (fiType == typeof(int))
                                {
                                    model = (T)row[0];
                                }
                                else if (fiType == typeof(string))
                                {
                                    model = (T)Enum.Parse(typeof(T), row[0].ToString());
                                }
                            }
                        }
                        break;
                    //引用类型 c#对string也当做值类型处理
                    case ModelType.String:
                        {
                            model = default(T);
                            if (row[0] != null)
                                model = (T)row[0];
                        }
                        break;
                    //引用类型 直接返回第一行第一列的值
                    case ModelType.Object:
                        {
                            model = default(T);
                            if (row[0] != null)
                                model = (T)row[0];
                        }
                        break;
                    //引用类型
                    case ModelType.Else:
                        {
                            //引用类型 必须对泛型实例化
                            model = Activator.CreateInstance<T>();
                            //获取model中的属性
                            var modelPropertyInfos = type.GetProperties();
                            //遍历model每一个属性并赋值DataRow对应的列
                            foreach (var pi in modelPropertyInfos)
                            {
                                //获取属性名称
                                var name = pi.Name;
                                if (!row.Table.Columns.Contains(name) || row[name] == null || row[name] == DBNull.Value) continue;
                                var piType = GetModelType(pi.PropertyType);
                                switch (piType)
                                {
                                    case ModelType.Struct:
                                        {
                                            object value;
                                            if (!pi.PropertyType.Name.ToLower().Contains("nullable"))
                                                value = Convert.ChangeType(row[name], pi.PropertyType);
                                            else
                                                value = new NullableConverter(pi.PropertyType).ConvertFromString(row[name].ToString());
                                            pi.SetValue(model, value, null);
                                        }
                                        break;
    
                                    case ModelType.Enum:
                                        {
                                            var fiType = row[0].GetType();
                                            if (fiType == typeof(int))
                                            {
                                                pi.SetValue(model, row[name], null);
                                            }
                                            else if (fiType == typeof(string))
                                            {
                                                var value = (T)Enum.Parse(typeof(T), row[name].ToString());
                                                if (value != null)
                                                    pi.SetValue(model, value, null);
                                            }
                                        }
                                        break;
    
                                    case ModelType.String:
                                        {
                                            var value = Convert.ChangeType(row[name], pi.PropertyType);
                                            pi.SetValue(model, value, null);
                                        }
                                        break;
    
                                    case ModelType.Object:
                                        {
                                            pi.SetValue(model, row[name], null);
                                        }
                                        break;
    
                                    case ModelType.Else:
                                        throw new Exception("不支持该类型转换");
                                    default:
                                        throw new Exception("未知类型");
                                }
                            }
                        }
                        break;
    
                    default:
                        model = default(T);
                        break;
                }
                return model;
            }
    
            #endregion
        }
        #endregion
    
        #region SqlHelper
        public class SqlHelper
        {
            /// <summary>
            /// 从配置文件中读取数据库连接字符串
            /// </summary>
            public static string ConnectionString = ConfigurationManager.ConnectionStrings["constr"].ConnectionString;
    
            private static SqlConnection conn;
    
            #region 公共静态方法
    
            /// <summary>
            /// 填充DataTable
            /// </summary>
            /// <param name="spname">存储过程名</param>
            /// <param name="sqlParams">参数集</param>
            /// <returns>结果datatable</returns>
            public static DataTable FillDataTable(string spname, params SqlParameter[] sqlParams)
            {
                conn = new SqlConnection(ConnectionString);
                using (SqlDataAdapter adapter = new SqlDataAdapter(spname, conn))
                {
                    adapter.SelectCommand.CommandType = CommandType.StoredProcedure;
                    if (sqlParams != null && sqlParams.Length > 0)
                    {
                        for (int i = 0; i < sqlParams.Length; i++)
                        {
                            adapter.SelectCommand.Parameters.Add(sqlParams[i]);
                        }
                    }
                    DataTable table = new DataTable();
                    adapter.Fill(table);
                    return table;
                }
            }
    
            /// <summary>
            /// 执行一条SQL的select语句,用返回的结果填充DataTable
            /// </summary>
            /// <param name="sql">要执行的SQL语句</param>
            /// <param name="oParams">SQL语句中的参数</param>
            /// <returns>已填充数据的DataTable</returns>
            public static DataTable FillSqlDataTable(string sql, params SqlParameter[] oParams)
            {
                using (conn = new SqlConnection(ConnectionString))
                {
                    SqlDataAdapter adapter = new SqlDataAdapter(sql, conn);
                    if (oParams != null && oParams.Length > 0)
                    {
                        foreach (SqlParameter prm in oParams)
                        {
                            adapter.SelectCommand.Parameters.Add(prm);
                        }
                    }
                    DataTable table = new DataTable();
                    adapter.Fill(table);
                    return table;
                }
            }
    
            /// <summary>
            /// 执行一条存储过程,返回SqlDataReader
            /// </summary>
            /// <param name="spname">存储过程名称</param>
            /// <param name="sqlParams">存储过程参数集合</param>
            /// <returns>SqlDataReader</returns>
            public static SqlDataReader ExecuteReader(string spname, params SqlParameter[] sqlParams)
            {
                return ExecuteReader(CommandType.StoredProcedure, spname, sqlParams);
            }
    
            /// <summary>
            /// 执行一条存储过程或SQL语句,返回SqlDataReader
            /// </summary>
            /// <param name="cmdText">SQL语句或存储过程名称</param>
            /// <param name="sqlParams">SQL参数集合</param>
            /// <returns>SqlDataReader</returns>
            public static SqlDataReader ExecuteReader(CommandType cmdType, string cmdText, params SqlParameter[] sqlParams)
            {
                conn = new SqlConnection(ConnectionString);
                using (SqlCommand cmd = new SqlCommand(cmdText, conn))
                {
                    cmd.CommandType = cmdType;
                    if (sqlParams != null && sqlParams.Length > 0)
                    {
                        for (int i = 0; i < sqlParams.Length; i++)
                        {
                            cmd.Parameters.Add(sqlParams[i]);
                        }
                    }
                    try
                    {
                        cmd.Connection.Open();
                        return cmd.ExecuteReader(CommandBehavior.CloseConnection);
                    }
                    catch
                    {
                        cmd.Connection.Close();
                        throw;
                    }
                }
            }
    
            /// <summary>
            /// 执行存储过程
            /// </summary>
            /// <param name="spname">存储过程名称</param>
            /// <param name="sqlParams">存储过程参数集合</param>
            /// <returns>受影响的记录行数</returns>
            public static int ExecuteNonQuery(string spname, params SqlParameter[] sqlParams)
            {
                return ExecuteNonQuery(CommandType.StoredProcedure, spname, sqlParams);
            }
    
            /// <summary>
            /// 执行一条SQL语句,获取受SQL语句中delete、update和insert语句影响的行数
            /// </summary>
            /// <param name="sql">要执行的SQL语句</param>
            /// <param name="oParams">SQL语句中的参数</param>
            /// <returns>受SQL语句中delete、update和insert语句影响的行数</returns>
            public static int ExecuteSqlNonQuery(string sql, params SqlParameter[] oParams)
            {
                using (conn = new SqlConnection(ConnectionString))
                {
                    SqlCommand cmd = new SqlCommand(sql, conn);
                    conn.Open();
                    if (oParams != null && oParams.Length > 0)
                    {
                        foreach (SqlParameter prm in oParams)
                        {
                            cmd.Parameters.Add(prm);
                        }
                    }
                    int reslt = cmd.ExecuteNonQuery();
                    conn.Close();
                    return reslt;
                }
            }
    
            /// <summary>
            /// 执行SQL语句或存储过程
            /// </summary>
            /// <param name="cmdType">执行类型:SQL语句或存储过程</param>
            /// <param name="cmdText">要执行的SQL语句或存储过程名</param>
            /// <param name="sqlParams">SQL参数集合</param>
            /// <returns>受影响的记录行数</returns>
            public static int ExecuteNonQuery(CommandType cmdType, string cmdText, params SqlParameter[] sqlParams)
            {
                conn = new SqlConnection(ConnectionString);
    
                using (SqlCommand cmd = new SqlCommand(cmdText, conn))
                {
                    cmd.CommandType = cmdType;
                    if (sqlParams != null && sqlParams.Length > 0)
                    {
                        for (int i = 0; i < sqlParams.Length; i++)
                        {
                            cmd.Parameters.Add(sqlParams[i]);
                        }
                    }
                    conn.Open();
                    int j = cmd.ExecuteNonQuery();
                    conn.Close();
                    return j;
                }
            }
    
            /// <summary>
            /// 执行SQL语句或存储过程返回第一行第一列的数据
            /// </summary>
            /// <param name="cmdType">执行类型:SQL语句或存储过程</param>
            /// <param name="sqlParams">参数集</param>
            /// <param name="cmdText">执行语句</param>
            /// <returns>返回第一行第一列的数据</returns>
            public static object ExecuteScalar(CommandType cmdType, string cmdText, params SqlParameter[] sqlParams)
            {
                conn = new SqlConnection(ConnectionString);
                using (SqlCommand cmd = new SqlCommand(cmdText, conn))
                {
                    cmd.CommandType = cmdType;
                    if (sqlParams != null && sqlParams.Length > 0)
                    {
                        for (int i = 0; i < sqlParams.Length; i++)
                        {
                            cmd.Parameters.Add(sqlParams[i]);
                        }
                    }
                    conn.Open();
                    object obj = null;
                    try
                    {
                        obj = cmd.ExecuteScalar();
                    }
                    catch
                    {
                        conn.Close();
                        conn.Open();
                        obj = cmd.ExecuteScalar();
                    }
                    conn.Close();
                    return obj;
                }
            }
    
            /// <summary>
            /// 执行存储过程,填充DataRow,若无数据则返回null
            /// </summary>
            /// <param name="spname">执行语句</param>
            /// <param name="sqlParams">参数集</param>
            /// <returns>返回DataRow</returns>
            public static DataRow FillDataRow(string spname, params SqlParameter[] sqlParams)
            {
                DataTable table = FillDataTable(spname, sqlParams);
                if (table.Rows.Count > 0)
                    return table.Rows[0];
                return null;
            }
    
            /// <summary>
            /// 向数据库中插入或更新数据时,设置存储过程参数
            /// </summary>
            /// <param name="pName">存储过程参数名</param>
            /// <param name="pValue">参数值</param>
            /// <returns>返回SqlParameter</returns>
            public static SqlParameter SetParam(string pName, object pValue)
            {
                //如果pValue为null,则直接返回 2004-12-6
                if (pValue == null)
                    return new SqlParameter(pName, pValue);
                switch (Type.GetTypeCode(pValue.GetType()))
                {
                    case TypeCode.String:
                        string tempStr = (string)pValue;
                        if (tempStr.Equals(null) || tempStr.Trim().Length.Equals(0))
                        {
                            return new SqlParameter(pName, DBNull.Value);
                        }
                        return new SqlParameter(pName, tempStr);
    
                    case TypeCode.DateTime:
                        DateTime tempdt = (DateTime)pValue;
                        if (tempdt.Equals(DateTime.MinValue))
                        {
                            return new SqlParameter(pName, DBNull.Value);
                        }
                        return new SqlParameter(pName, tempdt);
    
                    default:
                        return new SqlParameter(pName, pValue);
                }
            }
    
            /// <summary>
            /// 获取SqlDataReader中指定字符串字段的值
            /// </summary>
            /// <param name="reader">包含数据的SqlDataReader</param>
            /// <param name="fieldName">字段名</param>
            /// <returns>字段值,若字段为空则返回空字符串</returns>
            public static string GetStringFieldValue(SqlDataReader reader, string fieldName)
            {
                if (Convert.IsDBNull(reader[fieldName]))
                {
                    return String.Empty;
                }
                return reader[fieldName].ToString();
            }
    
            /// <summary>
            /// 获取SqlDataReader中指定Int字段的值,若该字段为空则返回指定的替换值
            /// </summary>
            /// <param name="reader">包含数据的SqlDataReader</param>
            /// <param name="fieldName">字段名</param>
            /// <param name="replaceValue">要替换值为空的字段的值</param>
            /// <returns>字段值,若该字段为空则返回replaceValue</returns>
            public static int GetIntFieldValue(SqlDataReader reader, string fieldName, int replaceValue)
            {
                if (Convert.IsDBNull(reader[fieldName]))
                {
                    return replaceValue;
                }
                object obj = reader[fieldName];
                return Convert.ToInt32(reader[fieldName]);
            }
    
            /// <summary>
            /// 获取SqlDataReader中指定Int字段的值
            /// </summary>
            /// <param name="reader">包含数据的SqlDataReader</param>
            /// <param name="fieldName">字段名</param>
            /// <returns>字段值,若该字段为空则返回0</returns>
            public static int GetIntFieldValue(SqlDataReader reader, string fieldName)
            {
                return GetIntFieldValue(reader, fieldName, 0);
            }
    
            /// <summary>
            /// 获取SqlDataReader中指定byte字段(SQL Server中为tinyint类型)的值
            /// </summary>
            /// <param name="reader">包含数据的SqlDataReader</param>
            /// <param name="fieldName">要取值的字段名</param>
            /// <returns>返回byte类型结果</returns>
            public static byte GetByteFieldValue(SqlDataReader reader, string fieldName)
            {
                if (Convert.IsDBNull(reader[fieldName]))
                    return 0;
                return (byte)reader[fieldName];
            }
    
            /// <summary>
            /// 获取SqlDataReader中指定decimal字段的值,若该字段为空则返回指定的替换值
            /// </summary>
            /// <param name="reader">包含数据的SqlDataReader</param>
            /// <param name="fieldName">要取值的字段名</param>
            /// <param name="replaceValue">要替换值为空的字段的值</param>
            /// <returns>返回double类型结果</returns>
            public static Double GetDoubleFieldValue(SqlDataReader reader, string fieldName, Double replaceValue)
            {
                if (Convert.IsDBNull(reader[fieldName]))
                    return replaceValue;
                return (Double)reader[fieldName];
            }
    
            /// <summary>
            /// 获取SqlDataReader中指定Int字段的值,若该字段为空则返回0
            /// </summary>
            /// <param name="reader">包含数据的SqlDataReader</param>
            /// <param name="fieldName">要取值的字段名</param>
            /// <returns>返回double类型结果</returns>
            public static Double GetDoubleFieldValue(SqlDataReader reader, string fieldName)
            {
                return GetDoubleFieldValue(reader, fieldName, 0);
            }
    
            /// <summary>
            /// 获取SqlDataReader中指定float字段的值,若该字段为空则返回0
            /// </summary>
            /// <param name="reader">包含数据的SqlDataReader</param>
            /// <param name="fieldName">要取值的字段名</param>
            /// <returns>返回double类型结果</returns>
            public static float GetFloatFieldValue(SqlDataReader reader, string fieldName)
            {
                return GetFloatFieldValue(reader, fieldName, 0);
            }
    
            /// <summary>
            /// 获取SqlDataReader中指定decimal字段的值,若该字段为空则返回指定的替换值
            /// </summary>
            /// <param name="reader">包含数据的SqlDataReader</param>
            /// <param name="fieldName">要取值的字段名</param>
            /// <param name="replaceValue">要替换值为空的字段的值</param>
            /// <returns>返回double类型结果</returns>
            public static float GetFloatFieldValue(SqlDataReader reader, string fieldName, float replaceValue)
            {
                if (Convert.IsDBNull(reader[fieldName]))
                    return replaceValue;
                return float.Parse(reader[fieldName].ToString());
            }
    
            /// <summary>
            /// 获取SqlDataReader中指定Int字段的值,若该字段为空则返回DateTime的最小值
            /// </summary>
            /// <param name="reader">包含数据的SqlDataReader</param>
            /// <param name="fieldName">要取值的字段名</param>
            /// <returns>返回DateTime类型结果</returns>
            public static DateTime GetDateTimeFieldValue(SqlDataReader reader, string fieldName)
            {
                if (Convert.IsDBNull(reader[fieldName]))
                    return DateTime.MinValue;
                return (DateTime)reader[fieldName];
            }
    
            #region 仅用于综合查询
    
            /// <summary>
            /// 执行查询语句,返回DataSet(zhaibl 09-11-04添加此方法)
            /// </summary>
            /// <param name="SQLString">查询语句</param>
            /// <returns>DataSet</returns>
            public static DataSet Query(string SQLString)
            {
                using (SqlConnection connection = new SqlConnection(ConnectionString))
                {
                    DataSet ds = new DataSet();
                    try
                    {
                        connection.Open();
                        SqlDataAdapter command = new SqlDataAdapter(SQLString, connection);
                        command.Fill(ds, "ds");
                    }
                    catch (System.Data.SqlClient.SqlException ex)
                    {
                        throw new Exception(ex.Message);
                    }
                    return ds;
                }
            }
    
            /// <summary>
            /// 执行一条计算查询结果语句,返回查询结果(object)。
            /// </summary>
            /// <param name="SQLString">计算查询结果语句</param>
            /// <returns>查询结果(object)</returns>
            public static object GetSingle(string SQLString)
            {
                using (SqlConnection connection = new SqlConnection(ConnectionString))
                {
                    using (SqlCommand cmd = new SqlCommand(SQLString, connection))
                    {
                        try
                        {
                            connection.Open();
                            object obj = cmd.ExecuteScalar();
                            if ((Object.Equals(obj, null)) || (Object.Equals(obj, System.DBNull.Value)))
                            {
                                return null;
                            }
                            else
                            {
                                return obj;
                            }
                        }
                        catch (System.Data.SqlClient.SqlException e)
                        {
                            connection.Close();
                            throw new Exception(e.Message);
                        }
                    }
                }
            }
    
            /// <summary>
            /// 填充数据集(执行带参的sql),返回DataSet
            /// </summary>
            /// <param name="sql">sql语句</param>
            /// <param name="oParams">参数集</param>
            /// <returns>datasat</returns>
            public static DataSet FillDataSet(string sql, params SqlParameter[] oParams)
            {
                using (SqlConnection conn = new SqlConnection(ConnectionString))
                {
                    SqlDataAdapter adapter = new SqlDataAdapter(sql, conn);
                    if (oParams != null && oParams.Length > 0)
                    {
                        foreach (SqlParameter prm in oParams)
                        {
                            adapter.SelectCommand.Parameters.Add(prm);
                        }
                    }
                    DataSet ds = new DataSet();
                    adapter.Fill(ds);
                    return ds;
                }
            }
    
            /// <summary>
            /// 执行一条SQL语句,获取受SQL语句中delete、update和insert语句影响的行数
            /// </summary>
            /// <param name="sql">要执行的SQL语句</param>
            /// <param name="oParams">SQL语句中的参数</param>
            /// <returns>受SQL语句中delete、update和insert语句影响的行数</returns>
            public static int ExecuteSqlNonQuery1(string sql, params SqlParameter[] oParams)
            {
                int reslt = 0;
                try
                {
                    using (conn = new SqlConnection(ConnectionString))
                    {
                        SqlCommand cmd = new SqlCommand(sql, conn);
                        conn.Open();
                        cmd.CommandType = CommandType.StoredProcedure;
                        cmd.Parameters.AddRange(oParams);
                        reslt = cmd.ExecuteNonQuery();
                        conn.Close();
                    }
                }
                catch (Exception e)
                {
                    throw new Exception(e.Message);
                }
                return reslt;
            }
    
            /// <summary>
            /// 获取查询结果
            /// </summary>
            /// <param name="sql">要执行的SQL语句</param>
            /// <returns>DataTable</returns>
            public static DataTable GetQueryResult(string sql)
            {
                DataTable tbl = new DataTable();
                conn = new SqlConnection(ConnectionString);
                using (SqlDataAdapter adapter = new SqlDataAdapter(sql, conn))
                {
                    adapter.Fill(tbl);
                }
                conn.Close();
                return tbl;
            }
    
            #endregion 仅用于综合查询
    
            #endregion 公共静态方法
    
            #region 事务--Bao--2017-08-17
    
            /// <summary>
            /// 创建一个事务
            /// </summary>
            /// <returns></returns>
            public static SqlTransaction CreateTrans()
            {
                conn = new SqlConnection(ConnectionString);
                conn.Open();
                return conn.BeginTransaction();
            }
    
            /// <summary>
            /// 关闭并释放与事务有关的资源
            /// </summary>
            /// <param name="trans"></param>
            public static void CloseTrans(SqlTransaction trans)
            {
                if (trans == null) return;
    
                trans.Dispose();
    
                if (conn == null || conn.State != ConnectionState.Open) return;
                conn.Close();
                conn.Dispose();
            }
    
            /// <summary>
            /// 执行一条不返回结果的SqlCommand,通过一个已经存在的数据库事物处理
            /// 使用参数数组提供参数
            /// </summary>
            /// <param name="trans">一个存在的 sql 事物处理</param>
            /// <param name="commandType">SqlCommand命令类型 (存储过程, T-SQL语句, 等等。)</param>
            /// <param name="commandText">存储过程的名字或者 T-SQL 语句</param>
            /// <param name="sqlParams">以数组形式提供SqlCommand命令中用到的参数列表</param>
            /// <returns>返回一个数值表示此SqlCommand命令执行后影响的行数</returns>
            public static int ExecuteNonQuery(SqlTransaction trans, CommandType cmdType, string cmdText, params SqlParameter[] sqlParams)
            {
                if (trans == null) return ExecuteNonQuery(cmdType, cmdText, sqlParams);
    
                using (SqlCommand cmd = new SqlCommand())
                {
                    PrepareCommand(cmd, trans.Connection, trans, cmdType, cmdText, sqlParams);
                    int val = cmd.ExecuteNonQuery();
                    cmd.Parameters.Clear();
                    return val;
                }
            }
    
            /// <summary>
            /// 执行SQL语句或存储过程返回第一行第一列的数据
            /// </summary>
            /// <param name="trans">一个存在的 sql 事物处理</param>
            /// <param name="cmdType">执行类型:SQL语句或存储过程</param>
            /// <param name="sqlParams">参数集</param>
            /// <param name="cmdText">执行语句</param>
            /// <returns>返回第一行第一列的数据</returns>
            public static object ExecuteScalar(SqlTransaction trans, CommandType cmdType, string cmdText, params SqlParameter[] sqlParams)
            {
                if (trans == null) return ExecuteScalar(cmdType, cmdText, sqlParams);
    
                using (SqlCommand cmd = new SqlCommand())
                {
                    PrepareCommand(cmd, trans.Connection, trans, cmdType, cmdText, sqlParams);
                    object val = cmd.ExecuteScalar();
                    cmd.Parameters.Clear();
                    return val;
                }
            }
    
            /// <summary>
            /// 为执行命令准备参数
            /// </summary>
            /// <param name="cmd">SqlCommand 命令</param>
            /// <param name="conn">已经存在的数据库连接</param>
            /// <param name="trans">数据库事物处理</param>
            /// <param name="cmdType">SqlCommand命令类型 (存储过程, T-SQL语句, 等等。)</param>
            /// <param name="cmdText">Command text,T-SQL语句 例如 Select * from Products</param>
            /// <param name="cmdParms">返回带参数的命令</param>
            private static void PrepareCommand(SqlCommand cmd, SqlConnection conn, SqlTransaction trans, CommandType cmdType, string cmdText, SqlParameter[] cmdParms)
            {
                //判断数据库连接状态
                if (conn.State != ConnectionState.Open)
                    conn.Open();
    
                cmd.Connection = conn;
                cmd.CommandText = cmdText;
    
                //判断是否需要事物处理
                if (trans != null)
                    cmd.Transaction = trans;
    
                cmd.CommandType = cmdType;
    
                if (cmdParms != null)
                {
                    foreach (SqlParameter parm in cmdParms)
                        cmd.Parameters.Add(parm);
                }
            }
    
            #endregion 事务--Bao--2017-08-17
    
            public static void LogInfo(string msg)
            {
                string FilePath = AppDomain.CurrentDomain.SetupInformation.ApplicationBase + "log\";
                if (!System.IO.Directory.Exists(FilePath))
                {
                    System.IO.Directory.CreateDirectory(FilePath);
                }
                try
                {
                    string fileName = FilePath + DateTime.Now.ToString("yyyyMMdd") + ".log";
                    var logStreamWriter = new System.IO.StreamWriter(fileName, true, Encoding.GetEncoding("gb2312"));
    
    
                    logStreamWriter.WriteLine(msg);
                    logStreamWriter.Close();
                }
                catch
                { }
            }
    
            #region 标准MD5加密
            /// <summary>
            /// MD5加密字符串
            /// </summary>
            /// <param name="str"></param>
            /// <returns></returns>
            public static string Md5String(string str)
            {
                string pwd = String.Empty;
                MD5 md5 = MD5.Create();
                // 编码UTF8/Unicode 
                byte[] s = md5.ComputeHash(Encoding.UTF8.GetBytes(str));
                // 转换成字符串
                for (int i = 0; i < s.Length; i++)
                {
                    //格式后的字符是小写的字母
                    //如果使用大写(X)则格式后的字符是大写字符
                    pwd = pwd + s[i].ToString("x2");
                }
                return pwd;
            }
            #endregion
    
            #region 分页
    
            /// <summary>
            /// 获取分页数据
            /// </summary>
            /// <param name="tableName">表名</param>
            /// <param name="primaryKey">主键字段名</param>
            /// <param name="pageIndex">页码</param>
            /// <param name="pageSize">页尺寸</param>
            /// <param name="isReCount">返回记录总数, 非 0 值则返回</param>
            /// <param name="orderType">设置排序类型, 非 0 值则降序</param>
            /// <param name="where">查询条件 (注意: 不要加 where)</param>
            /// <param name="recount">返回记录总数</param>
            /// <param name="pageCount">返回总页数</param>
            /// <returns></returns>
            public static DataTable GetPage(string tableName, string primaryKey, int pageIndex, int pageSize, int isReCount, int orderType, string where, out int recount, out int pageCount)
            {
                string procName = "SP_Page";
                SqlParameter[] paras = new SqlParameter[]{
                    new SqlParameter("@Recount",SqlDbType.Int),
                    new SqlParameter("@PageCount",SqlDbType.Int),
                    new SqlParameter("@tblName",tableName),
                    new SqlParameter("@fldName",primaryKey),
                    new SqlParameter("@PageSize",pageSize),
                    new SqlParameter("@PageIndex",pageIndex),
                    new SqlParameter("@IsReCount",isReCount),
                    new SqlParameter("@OrderType",orderType),
                    new SqlParameter("@strWhere",where)
                };
    
                paras[0].Direction = ParameterDirection.Output;
                paras[1].Direction = ParameterDirection.Output;
    
                DataTable dt = SqlHelper.FillDataTable(procName, paras);
    
                recount = int.Parse(paras[0].Value.ToString());
                pageCount = int.Parse(paras[1].Value.ToString());
    
                return dt;
            }
    
    
    
    
    
    
            public static string newShowPageNavNew(int pageCurrent, int totalCount, int pageSize = 5, string methodName = "getlist")
            {
                var totalPage = Math.Max((totalCount + pageSize - 1) / pageSize, 1);
                //if (totalPage >= 1)
                //{
                //要输出的超链接字符串
                var pageNav = new StringBuilder();
                //左边代码
                //无数据
                if (totalCount == 0)
                {
                    pageNav.AppendFormat("<div class='col-sm-4'><div class='dataTables_info' id='editable_info' role='alert' aria-live='polite' aria-relevant='all'>显示 0 项,共 0 项</div></div>");
                }
                else
                {
                    //最后一页文件数量
                    if (pageCurrent == totalPage)
                    {
                        pageNav.AppendFormat("<div class='col-sm-4'><div class='dataTables_info' id='editable_info' role='alert' aria-live='polite' aria-relevant='all'>显示 " + ((pageCurrent - 1) * pageSize + 1) + "" + totalCount + " 项,共 " + totalCount + " 项</div></div>");
                    }
                    else
                    {
                        pageNav.AppendFormat("<div class='col-sm-4'><div class='dataTables_info' id='editable_info' role='alert' aria-live='polite' aria-relevant='all'>显示 " + ((pageCurrent - 1) * pageSize + 1) + "" + (pageCurrent * pageSize) + " 项,共 " + totalCount + " 项</div></div>");
                    }
                }
    
                //右边代码
                pageNav.AppendFormat("<div class='col-sm-8'><div class='dataTables_paginate paging_simple_numbers' id='editable_paginate'><ul class='pagination'>");
    
                //如果当前是第一页,则“上一页”不可点
                if (pageCurrent == 1)
                {
                    pageNav.AppendFormat("<li class='paginate_button previous disabled' aria-controls='editable' tabindex='0' id='editable_previous'><a href='javascript:void(0)'>上一页</a></li>");
                }
                else
                {
                    pageNav.AppendFormat("<li class='paginate_button previous' aria-controls='editable' tabindex='0' id='editable_previous'><a href='javascript:void(0)' onclick='" + methodName + "({0},{1})'>{2}</a></li>", pageCurrent - 1, pageSize, "上一页");
                }
    
                //中间页码 
                if (pageCurrent <= 3)
                {
                    for (int i = 1; i < 8; i++)
                    {
                        if (i <= totalPage)
                        {
                            if (pageCurrent == i) //当前页处理
                            {
                                pageNav.AppendFormat("<li class='paginate_button active' aria-controls='editable' tabindex='0'><a href='javascript:void(0)'>{0}</a></li>", pageCurrent);
                            }
                            else //一般页处理
                            {
                                pageNav.AppendFormat("<li class='paginate_button previous' aria-controls='editable' tabindex='0' id='editable_previous'><a href='javascript:void(0)' onclick='" + methodName + "({0},{1})'>{2}</a></li>", i, pageSize, i);
                            }
                        }
                    }
                }
                else if (pageCurrent > 3 && pageCurrent < totalPage - 3)
                {
                    int current = 4;
                    for (int i = 1; i < 8; i++)
                    {
                        if ((pageCurrent + i - current) >= 1 && (pageCurrent + i - current) <= totalPage)
                        {
                            if (current == i) //当前页处理
                            {
                                pageNav.AppendFormat("<li class='paginate_button active' aria-controls='editable' tabindex='0'><a href='javascript:void(0)'>{0}</a></li>", pageCurrent);
                            }
                            else //一般页处理
                            {
                                pageNav.AppendFormat("<li class='paginate_button previous' aria-controls='editable' tabindex='0' id='editable_previous'><a href='javascript:void(0)' onclick='" + methodName + "({0},{1})'>{2}</a></li>", pageCurrent + i - current, pageSize, pageCurrent + i - current);
                            }
                        }
                    }
    
                }
                else
                {
                    for (int i = totalPage - 6; i <= totalPage; i++)
                    {
                        if (i <= totalPage && i > 0)
                        {
                            if (pageCurrent == i) //当前页处理
                            {
                                pageNav.AppendFormat("<li class='paginate_button active' aria-controls='editable' tabindex='0'><a href='javascript:void(0)'>{0}</a></li>", pageCurrent);
                            }
                            else //一般页处理
                            {
                                pageNav.AppendFormat("<li class='paginate_button previous' aria-controls='editable' tabindex='0' id='editable_previous'><a href='javascript:void(0)' onclick='" + methodName + "({0},{1})'>{2}</a></li>", i, pageSize, i);
                            }
                        }
                    }
                }
    
                //如果当前是最后一页,则“下一页”不可点
                if (pageCurrent == totalPage)
                {
                    pageNav.AppendFormat("<li class='paginate_button next disabled' aria-controls='editable' tabindex='0' id='editable_next'><a href='javascript:void(0)'>下一页</a></li>");
                }
                else
                {
                    pageNav.AppendFormat("<li class='paginate_button next' aria-controls='editable' tabindex='0' id='editable_next'><a href='javascript:void(0)' onclick='" + methodName + "({0},{1})'>{2}</a></li>", pageCurrent + 1, pageSize, "下一页");
                }
                pageNav.AppendFormat("</ul></div></div>");
                return pageNav.ToString();
                //}
                //else
                //{
                //    return string.Empty;
                //}
            }
            #endregion
        }
        #endregion
    }
  • 相关阅读:
    bzoj2301: [HAOI2011]Problem b懵逼乌斯反演
    bzoj3504: [Cqoi2014]危桥 网络流
    bzoj1588: [HNOI2002]营业额统计 splay瞎写
    bzoj1008快速面
    洛谷1212手动枚举各种情况(缩代码成瘾)
    bzoj1968真·想sha法bi题
    bzoj3674同上(好短)
    bzoj3673可持久化线段树实现可持久化数组实现可持久化并查集(好长)
    uoj98未来程序改 纯暴力不要想了
    bzoj3680模拟退火
  • 原文地址:https://www.cnblogs.com/yang315/p/14812228.html
Copyright © 2020-2023  润新知