自定義類庫代碼分析

前面說了如何編寫自定義類庫,以及如何調用,以及在程序中的使用。
現在給出一個自定義的類庫的案例,並對其進行分析和學習。

一些頻繁使用的功能,如數據庫訪問,字符替換,郵件發送,文件讀取等這些代碼較多,重新寫比較繁瑣。如果利用代碼插入方式也可以方便的使這些代碼重複使用,但是下面介紹一種更加有效的方法-編寫類庫。哈哈,我來了。。

該程序文件名webtools.cs,編譯後文件是WebTools.dll,位於站點的bin目錄下。
該案例用到的主要技術是ASP.NET中組件的應用技術,包括組件的編寫、編譯、調用。
代碼如下:

namespace WebTools
{
 using System;
 using System.IO;
 using System.Net;
 using System.Data;
 using System.Data.SqlClient;
 using System.Web.Mail;
 public class Tools
 {
  public SqlConnection connStr=new SqlConnection("server=172.0.0.1;database=misgd;User ID=test;Password=888888;");
  //站點參數
  public string ChangeStr(string str,int num)
  {
   string add_str="";
   if(str.Length>num)add_str="..";
   string addstr=str+"                   ";//加點空格
   return addstr.Substring(0,num).Trim().Replace(" ","&nbsp;").Replace("/n","<br/>")+add_str;
  }//文本字符替換

  public string CheckStr(string strname,string str,int minnum,int maxnum)
  {
   string estr="";
   byte[] bstr=System.Text.Encoding.Default.GetBytes(str);
   if((bstr.Length>maxnum)||(bstr.Length<minnum)) estr+="字符數目不符,應該在"+minnum+"-"+maxnum+"之間!";
   Char[] spestr={'?','=','&','+','"','/'',';','//','<','>','|'};
   if(str.IndexOfAny(spestr)>-1)
    estr+="含有非法字符:問號 等號 加號 分號 單引號 雙引號 // () <>|&等!";
   if(estr!="")
   {
    return "“"+strname+"”: "+estr+"<br/>";
   }
   else
   {
    return estr;
   }
  }//客戶輸入檢查

  public string PswdFormat(string str,string format)
  {
   string returnstr="";
   if(format=="SHA1")returnstr=System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(str,"SHA1");
   if(format=="MD5")returnstr=System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(str,"MD5");
   return returnstr;
  }//ASP.NET的加密方式

  public SqlDataReader SqlReader(string sql,SqlConnection connstr)
  {
            SqlDataReader sqldr=null;
   SqlCommand cmd = new SqlCommand(sql,connstr);
   if(cmd.Connection.State.ToString()=="Closed")cmd.Connection.Open();
   try
   {
    sqldr=cmd.ExecuteReader();
   }
   catch(Exception e)
   {
    if (e!=null)sqldr=null;
   }
   return sqldr;
  }//數據庫讀取連接
  
  public string SqlCmd(string sql,SqlConnection connstr)
  {
   string errorstr =null;
   SqlCommand sqlcmd=new SqlCommand(sql,connstr);
   if(sqlcmd.Connection.State.ToString()=="Open")sqlcmd.Connection.Close();
   sqlcmd.Connection.Open();
   try
   {
    sqlcmd.ExecuteNonQuery();
   }
   catch(Exception e)
   {
    if(e!=null)errorstr=e.ToString();
   }
   sqlcmd.Connection.Close();
   return errorstr;
  }//數據庫操作連接

  public void Wfile(string filename,string filecont)
  {
   FileStream fs=new FileStream(filename,FileMode.OpenOrCreate,FileAccess.Write);
   StreamWriter wfile =new StreamWriter(fs);
   wfile.BaseStream.Seek(0,SeekOrigin.End);
   wfile.WriteLine(filecont);
   wfile.Flush();
   wfile.Close();
  }//寫入記錄文件

  public string Rfile(string filename,int startline,int endline)
  {
   string ReadFile="";
   FileStream fs=new FileStream(filename,FileMode.OpenOrCreate,FileAccess.Read);
   StreamReader rfile=new StreamReader(fs);
   rfile.BaseStream.Seek(0,SeekOrigin.Begin);
   for(int i=0;i<=endline;i++)
   {
    if((i>=startline)&&(rfile.Peek()>-1))
    {
     ReadFile+=rfile.ReadLine()+"/n";
    }
    else
    {
     if(rfile.Peek()>-1){rfile.ReadLine();}
     else{break;}
    }
   }
   return ReadFile;
  }//讀取文件

  public void SendMail(string fromad,string sendad,string msubject,string mbody)
  {
   MailMessage mm=new MailMessage();
   mm.From=fromad;
   mm.To=sendad;
   //mm.Bcc="";//密送地址
   //mm.Cc="";//抄送地址
   mm.Subject=msubject;//郵件主題
   mm.Body=mbody;//郵件內容
   mm.BodyFormat=MailFormat.Html;//正文格式
   mm.Priority=MailPriority.High;//優先級
   //mm.Attachments.Add(new MailAttachment("c://lixi.txt"));//附件
   SmtpMail.Send(mm);
  }//郵件發送

  public string ShowMsgBox(string Msg,string Action)
  {
   string AddAction="";
   if(Action!=null)
   {
    switch(Action)
    {
     case "back":
      AddAction="window.history.back(1);";
      break;
     case "close":
      AddAction="top.close();";
      break;
     default:
      AddAction="location.href='"+Action+"';";
      break;    
    }
    
   }
   return "<script language='javascript'>alert('"+Msg+"');"+AddAction+"<"+"/script>";
  }//提示信息


  public string PutToHtml(string HttpFile,string SaveFile)
  {
   string ReturnMsg="";
   if((HttpFile!="")&&(SaveFile!=""))
   {
    WebClient Wclient= new WebClient();
    try
    {
     Wclient.DownloadFile(HttpFile,SaveFile);
     ReturnMsg="1";
    }
    catch(WebException ex)
    {
     if(ex!=null)ReturnMsg="0";
    }
   }
   else
   {
    ReturnMsg="-1";
   }
   if(ReturnMsg=="")ReturnMsg="-1";
   return ReturnMsg;
  }//HTML下載
 }
}
//connStr:數據庫連接參數
//ChangStr(string str,int num):字符轉換函數,顯示空格,回車等。
//CheckStr(string strname,string str,int minnum,int maxnum):字符檢查函數。
//SqlReader(string sql,SqlConnection connstr):數據庫讀取函數。
//PswdFormat(string str,string format):密碼加密函數。
//SqlCmd(string sql,SqlConnection connstr):數據庫命令執行函數。
//Wfile(string filename,string filecont):寫文本文件函數。
//Rfile(string filename,int startline,int endline):讀文本文件函數
//SendMail(string fromad,string sendad,string msubject,string mbody);郵件發送程序。
//ShowMsgBox(string Msg,string Action):信息提示函數。
//PutToHtml(string HttpFile,string SaveFile):可以將制定地址的HTML代碼保存爲HTML頁面。

//反編譯,微軟的。。。。

ildasm /adv assembly.dll

添加/adv參數後,菜單中會多出幾項,適用於.NET Framework 1.0 and 1.1。2.0下好像所有的菜單都直接顯示出來了。

幫助文件和ildasm /?中都沒有給出adv參數的描述。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章