前面說了如何編寫自定義類庫,以及如何調用,以及在程序中的使用。
現在給出一個自定義的類庫的案例,並對其進行分析和學習。
一些頻繁使用的功能,如數據庫訪問,字符替換,郵件發送,文件讀取等這些代碼較多,重新寫比較繁瑣。如果利用代碼插入方式也可以方便的使這些代碼重複使用,但是下面介紹一種更加有效的方法-編寫類庫。哈哈,我來了。。
該程序文件名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(" "," ").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參數的描述。