ASP.NET校园新闻发布管理系统 第8页
5.5 系统部分重要功能及其代码
5.5.1 Web用户控件
该系统中创建了两个Web用户控件top.ascx和bottom.ascx,在首页、新闻详细内容查看、新闻分类等页面的HTML代码里都进行了引用,调用方式为:
<%@ Register TagPrefix="uc1" TagName="bottom" Src="bottom.ascx" %>
<%@ Register TagPrefix="uc1" TagName="top" Src="top.ascx" %>
@ Register指令注册用户控件,同时把属性TagName(标签名)和TagPrefix(标签前缀)添加到@ Register指令中,Src属性表示该用户控件相对于父页面的相对地址。用户控件也是服务器端控件,还必须在用户控件代码中添加Runat=server属性,用法如下:
<uc1:top id="Top1" runat="server"></uc1:top>
<uc1:bottom id="Bottom1" runat="server"></uc1:bottom>
其中top.ascx用户控件作用是显示首页图片、“首页”文本字体、新闻分类、新闻风格和当前日期,bottom.ascx用户控件作用是显示底部相关网站信息等。
用户控件是非常易于代码重用的,可以把许多相关功能和用户界面封装在一个用户控件中,然后在任何需要该功能的地方重用此控件。
5.5.2 通用类代码
在所有相关页面显示文件和Web用户控件的代码隐藏文件.aspx.cs或.ascx.cs中,通过对数据访问类的引用(以创建类实例方式),调用数据访问类里的相应函数完成相关功能,如建立数据库连接、打开和关闭数据库、对数据库执行查询、插入、删除和更新操作、页面登陆检验等。
此处列举Conn类(数据访问类)中主要函数的源码:
public class Conn
{
// 建立数据库连接字符串
public OleDbConnection Lb_Conn=new OleDbConnection(strConn);
public static string strConn //通过创建一个属性来连接数据库
{
get //使用get方法返回此属性的值
{
StringBuilder strResult = new StringBuilder();
strResult.Append("Provider = Microsoft.Jet.OLEDB.4.0");
strResult.Append("; ");
strResult.Append("Data Source = ");
strResult.Append(HttpContext.Current.Server.MapPath("."));
//HttpContext应用程序上下文类,Current属性表示进程中当前请
//求的上下文,MapPath()方法表示返回与Web服务器上的指定虚
//拟路径相对应的物理文件路径,此处作用是创建数据库文件的虚拟路径
strResult.Append("\\");
strResult.Append(ConfigurationSettings.AppSettings["MdbPath"]);
//从配置文件中取到数据库连接字符串,“MdbPath”为Web.config
//文件中的键/值对所设置的key值
return strResult.ToString(); //返回字符串类型
}
}
public OleDbDataReader ExecuteOleDbDataReader(string strSql)
{ //此函数表示从数据库读取数据时以只进只读的行流的方式进行
OleDbCommand cmd=new OleDbCommand(strSql,Lb_Conn);
OleDbDataReader rd=cmd.ExecuteReader();
//通过调用对象OleDbCommand的ExecuteReader()方法创建//OleDbDataReader对象
return rd;
}
public DataSet CreateDataSet(string strSql,string tableName)
{
OleDbDataAdapter da=new OleDbDataAdapter(strSql,Lb_Conn);
//创建DataAdapter类实例,可用于填充DataSet对象和检索、更新数据
DataSet dst=new DataSet();
da.Fill(dst,tableName);
//填充DataSet(数据集)中的一个表
return dst;
}
public int ExecuteSql(string strSql)
{
OleDbCommand cmd2=new OleDbCommand(strSql,Lb_Conn);
int result=cmd2.ExecuteNonQuery();
//对数据库执行插入、删除和更新等操作,返回影响数据库记录的行数
return result; }}
'数据起始位置:2个CRLF开始
DataStart = InStrB(PosOpenBoundary,FormData,str2bin(VbCrLf & VbCrLf)) + 4
If FormFileName 〈〉 "" Then
'数据长度,减1是因为数据文件的存取字节数问题(可能是AppendChunk方法的问题):
'由于字节数为奇数的图象存到数据库时会去掉最后一个字符导致图象不能正确显示,
'字节数为偶数的数据文件就不会出现这个问题,因此必须保持字节数为偶数。
DataSize = InStrB(DataStart,FormData,DivStr) - DataStart - 1
FormFieldData = MidB(FormData,DataStart,DataSize)
Else
'数据长度,减2是因为分隔标志串前有一个CRLF
DataSize = InStrB(DataStart,FormData,DivStr) - DataStart - 2
FormFieldData = bin2str(MidB(FormData,DataStart,DataSize))
End If
'建立一个Dictionary集存储Form中各个Field的相关数据
Set Field = CreateUploadField()
Field.Name = FormFieldName
Field.FilePath = FormFileName
Field.FileName = GetFileName(FormFileName)
Field.ContentType = FormFileCT
Field.Length = LenB(FormFieldData)
Field.Value = FormFieldData
Fields.Add FormFieldName, Field
PosOpenBoundary = PosCloseBoundary
PosCloseBoundary = InStrB(PosOpenBoundary + 1,FormData,DivStr)
Wend
Set GetUpload = Fields
End Function
'把二进制字符串转换成普通字符串函数
Function bin2str(binstr)
Dim varlen,clow,ccc,skipflag
'中文字符Skip标志
skipflag=0 ccc = ""