28
07/2014
c#工具包代码
我有一个习惯,学习一种新的语言,希望会有一种对应的工具包,这样开发效率会加快。C#刚学不久,目前构建了一个小工具包如下。工具包持续更新,放在KangryUtils包中。
Functions.cs文件:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.IO; namespace KangryUtils { class Functions { /******************************************************************************************* * 时间相关函数 *******************************************************************************************/ /// <summary> /// 验证日期是否正确 /// </summary> /// <param name="year">年份,int类型</param> /// <param name="month">月份,int类型</param> /// <param name="day">日期,int类型</param> /// <returns>布尔值</returns> public static bool checkDate(int year, int month, int day) { try { DateTime.Parse(year + "-" + month + "-" + day); } catch (Exception e) { return false; } return true; } /// <summary> /// 验证日期是否正确 /// </summary> /// <param name="dateStr">表示日期的字符串</param> /// <returns>布尔值</returns> public static bool checkDate(string dateStr) { try { DateTime.Parse(dateStr); } catch (Exception e) { return false; } return true; } /// <summary> /// 获取当前时间戳(秒数) /// </summary> /// <returns></returns> public static int getTimeStamp() { return getTimeStamp(DateTime.Now); } /// <summary> /// 获得特定的时间戳 /// </summary> /// <param name="time">DateTime类型的时间</param> /// <returns></returns> public static int getTimeStamp(DateTime time) { DateTime startTime = TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970, 1, 1)); return Convert.ToInt32((time - startTime).TotalSeconds); } /// <summary> /// 获得特定的时间戳 /// </summary> /// <param name="time">字符串表示的时间</param> /// <returns>若时间字符串格式正确,则返回时间戳,否则返回-1</returns> public static int getTimeStamp(string time) { int timestamp=-1; try { DateTime dt = Convert.ToDateTime(time); timestamp = getTimeStamp(dt); } catch (Exception e) { Log.errorLog("Fail to convert to timeStamp from a string: " + time); } return timestamp; } /// <summary> /// 通过时间戳获得DateTime /// </summary> /// <param name="timeStamp">时间戳</param> /// <returns></returns> public static DateTime getDateTime(int timeStamp) { DateTime dtStart = TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970, 1, 1)); TimeSpan ts = new TimeSpan(0, 0, timeStamp); return dtStart.Add(ts); } /// <summary> /// 获得DateTime /// </summary> /// <param name="time">字符串时间</param> /// <returns></returns> public static DateTime getDateTime(string time) { return getDateTime(getTimeStamp(time)); } /// <summary> /// 转化时间格式 /// </summary> /// <param name="sDt">原有的时间字符串</param> /// <param name="format">要转化的格式串</param> /// <returns>若成功,返回转换好的时间字符串,否则返回null</returns> public static string formatDateTime(string sDt, string format = "yyyy-MM-dd HH:mm:ss") { string sDateTime = null; try { sDateTime = formatDateTime(Convert.ToDateTime(sDt), format); } catch { Log.errorLog("Fail to convert the time string: " + sDt + " to a given format: " + format); } return null; } /// <summary> /// 转化时间格式 /// </summary> /// <param name="sDt">原有的DateTime格式时间</param> /// <param name="format">要转化的格式串</param> /// <returns>若成功,返回转换好的时间字符串,否则返回null</returns> public static string formatDateTime(DateTime dt, string format = "yyyy-MM-dd HH:mm:ss") { string sDateTime=null; try { sDateTime = dt.ToString(format); } catch (Exception e) { Log.errorLog("Fail to convert the time to a given format: " + format); } return sDateTime; } /// <summary> /// 通过时间戳获得特定格式的时间 /// </summary> /// <param name="iTimeStamp"></param> /// <param name="format"></param> /// <returns></returns> public static string formatDateTime(int iTimeStamp, string format = "yyyy-MM-dd HH:mm:ss") { return formatDateTime(getDateTime(iTimeStamp), format); } /******************************************************************************************** * 文件相关函数 ********************************************************************************************/ /// <summary> /// 创建文件夹路径 /// </summary> /// <param name="filePath">文件夹路径</param> /// <returns>是否创建成功</returns> public static bool makeDir(string filePath) { bool flag = true; System.IO.FileInfo fi = new System.IO.FileInfo(filePath); if (!fi.Directory.Exists) { try { fi.Directory.Create(); } catch (Exception e) { Log.traceLog("Fail to build directory: " + fi.Directory.ToString() + e.Message); //此处不用错误日志是防止递归调用 flag = false; } } return flag; } /// <summary> /// 创建文件 /// </summary> /// <param name="filePath">要创建的文件路径</param> /// <param name="append">是否往后追加</param> /// <returns>streamWriter</returns> public static StreamWriter makeFile(string filePath, bool append=true) { if(!makeDir(filePath)) { return null; } StreamWriter sw = null; try { sw = new StreamWriter(filePath, append); } catch (Exception e) { Log.traceLog("Fail to build a file: " + filePath + e.Message); //此处不用错误日志是防止递归调用 } return sw; } } }
Log.cs文件:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Diagnostics; using System.IO; namespace KangryUtils { class Log { //跟踪的日志 public static void traceLog(string content, bool bWriteToFile = false, string logFile = "") { string formatDate = Functions.formatDateTime(DateTime.Now, "yyyy-MM-dd HH:mm:ss"); TextWriterTraceListener fileT = null; StreamWriter sw = null; if (bWriteToFile) { if (logFile != "") { sw = Functions.makeFile(logFile); } else { string year = formatDate.Substring(0, 4); string month = formatDate.Substring(5, 2); string day = formatDate.Substring(8, 2); sw = Functions.makeFile("traceLog/" + year + "/" + month + "/" + year + "-" + month + "-" + day + ".log"); } } if (sw != null) { fileT = new TextWriterTraceListener(sw); Trace.Listeners.Add(fileT); } TextWriterTraceListener t = new TextWriterTraceListener(Console.Out); Trace.Listeners.Add(t); Trace.AutoFlush = true; Trace.WriteLine("[" + formatDate + "]"); Trace.Indent(); Trace.WriteLine(content, "Trace"); Trace.Unindent(); Trace.Listeners.Remove(t); if (sw != null) { Trace.Listeners.Remove(fileT); sw.Close(); } } //错误日志,同时写入文件 public static void errorLog(string content, bool bWriteToFile = true, string logFile = "") { string formatDate=Functions.formatDateTime(DateTime.Now, "yyyy-MM-dd HH:mm:ss"); TextWriterTraceListener fileT=null; StreamWriter sw=null; if (bWriteToFile) { if (logFile != "") { sw = Functions.makeFile(logFile); } else { string year = formatDate.Substring(0, 4); string month = formatDate.Substring(5, 2); string day = formatDate.Substring(8, 2); sw = Functions.makeFile("errorLog/" + year + "/" + month + "/" + year + "-" + month + "-" + day + ".log"); } } if (sw != null) { fileT = new TextWriterTraceListener(sw); Trace.Listeners.Add(fileT); } TextWriterTraceListener t = new TextWriterTraceListener(Console.Out); Trace.Listeners.Add(t); Trace.AutoFlush = true; Trace.WriteLine("[" + formatDate + "]"); Trace.Indent(); Trace.WriteLine(content, "Error"); Trace.Unindent(); Trace.Listeners.Remove(t); if (sw != null) { Trace.Listeners.Remove(fileT); sw.Close(); } } } }
Db.cs文件:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Configuration; using System.Data.SqlClient; using System.Data; namespace KangryUtils { class Db { private SqlConnection con; public Db() { string ConnectionString = ConfigurationManager.ConnectionStrings["DBConnection"].ConnectionString; try { con = new SqlConnection(ConnectionString); } catch (Exception e) { Log.errorLog("Fail to connect to database!\n" + e.Message); } } public Db(string connectionString) { try { con = new SqlConnection(connectionString); } catch (Exception e) { Log.errorLog("Fail to connect to database!\n" + e.Message); } } //关闭数据库 public void Close() { if (con.State != ConnectionState.Closed) { try { con.Close(); } catch (Exception e) { Log.errorLog("Fail to close database!\n" + e.Message); } } } //属性,判断连接对象的状态并打开连接对象 public SqlConnection Con { get { switch (con.State) { case ConnectionState.Broken: try { con.Close(); //先正常关闭,释放资源 } catch(Exception e) { Log.errorLog("Fail to close database!\n"+e.Message); } try { con.Open(); } catch(Exception e) { Log.errorLog("Fail to open database!\n"+e.Message); } break; case ConnectionState.Closed: try { con.Open(); } catch(Exception e) { Log.errorLog("Fail to open database!\n"+e.Message); } break; case ConnectionState.Connecting: case ConnectionState.Executing: case ConnectionState.Fetching: case ConnectionState.Open: break; default: break; } return con; } set { con = value; } } } }
在用工具包之前,需要引入连个引用:system.web和system.web.extension;
0 条评论