第25章 广告生成系统
本章视频教学录像:16分钟
现代生活中,广告是必不可少的一种宣传手段,在网站中添加广告是一种非常流行的做法。本章介绍如何在网站中发布不同的广告信息。
本章要点(已掌握的在方框中打钩)
□ 了解广告显示的原理
□ 创建数据库和数据表
□ 设计系统前台页面
□ 设计广告生成代码
□ 将广告生成系统添加至已有网站中
25.1 系统分析
本节视频教学录像:2分钟
网站建成使用后,随着人气的提升,许多广告客户希望能在互联网上做广告来宣传自己的商品。本章使用ASP.NET和SQL Server 2008来创建一个广告生成系统。
25.1.1 系统目标
本系统需要实现的目标有以下3点。
⑴在数据库中保存广告信息。
⑵提取广告信息存储到XML配置文件中。
⑶显示提取的广告信息。
25.1.2 系统原理
当用户需要添加广告信息时,可将输入的广告信息保存至数据库。需要显示广告时,可根据需要选择合适的广告信息生成XML配置文件,根据配置文件的内容显示对应的广告。用户单击广告时可浏览相应的网站信息。
25.1.3 技术要点
提示
如何生成XML配置文件?
要想根据获取的信息生成XML配置文件,需要使用System.Xml命名空间下的XmlDocument类在内存中对XML文件进行操作,并把操作的结果保存到磁盘上。详细代码参见25.3.5小节。
25.2 数据库分析及设计
本节视频教学录像:1分钟
根据分析,本系统需要用到数据库来存储发布的广告信息的数据,所以在系统开发之前,首先要进行数据库的设计。
25.2.1 数据库分析
在广告生成系统中,需要保存用户上传的广告图片,链接地址、显示文字、广告类别、显示频度等信息。
25.2.2 创建数据库
在SQL Server 2008中创建数据库的具体步骤如下。
⑴选择【开始】【所有程序】【Microsoft SQL Server 2008】【SQL Server Management Studio】,以【SQLServer身份验证】模式登录。
⑵在【对象资源管理器】窗口中的【数据库】节点上右击,在弹出的快捷菜单中选择【新建数据库】菜单项,弹出【新建数据库】对话框。
⑶在【数据库名称】文本框中输入“ch25DataBase”,在【数据库文件】列表框中使用默认设置“ch25DataBase”和“ch25DataBase _log”文件的路径,然后单击【确定】按钮,即可完成ch25DataBase数据库的创建。
25.2.3 创建数据表
本实例中需要一张记录上传文件相关信息的表,下面来创建数据表。
⑴在【对象资源管理器】中展开ch25DataBase节点,右击【表】节点,在弹出的快捷菜单中选择【新建表】菜单项。
⑵在打开的表编辑窗口中,按照下表进行输入。
⑶在【dbo.Table_1*】选项卡上右击,在弹出的快捷菜单中选择【保存】菜单项,弹出【选择名称】对话框,在【输入表名称】文本框中输入“tabAdSystem”,然后单击【确定】按钮,即可完成表的创建。
25.3 系统设计
本节视频教学录像:5分钟
在25.1.1小节中,已经提出了广告生成系统需要实现的3个目标,所以在系统设计时,需要设计3个模块来实现各个目标。
25.3.1 系统页面设计
首先设计系统的页面,页面中需要有上传的广告图片、单击广告链接的地址、广告不能显示时提示的文字信息、广告的分类以及每个广告在一定时间内显示的频率,还要能保存广告的信息以及关闭页面。
⑴在Visual Studio 2010中,新建【语言】为【Visual C#】的ASP.NET空白网站,添加一个默认的Default.aspx页面。
⑵在Default.aspx页面的设计视图中,如图所示设计系统界面,所用控件及属性设置如表所示。
⑶在网站中添加一个名为“ShowAd.aspx”的Web页面,用于显示设置的广告信息。在设计视图中,如图所示设计系统界面,所用控件及属性设置如表所示。
25.3.2 配置网站的Web.config
数据库和系统页面都设计好了,如何将它们连接起来呢?这就需要通过配置系统的Web.config文件来连接数据库。
在【解决方案资源管理器】中双击Web.config文件,打开Web.config的代码窗口,然后将<connectionStrings>和< /connectionStrings>之间的代码更换为以下代码。
<add name="ch25DataBase" connectionString="Data Source= localhost;Initial Catalog=ch25DataBase; User ID=sa;Password=123"/>
【代码详解】
此段代码的作用是添加一个数据库的连接字符串,“localhost”表示要连接当前本机的数据库,读者也可设定为数据库所在服务器的IP地址。数据库的名称为“ch25DataBase”。
25.3.3 数据库连接代码设计
在系统保存上传信息时要连接数据库,结束时要关闭此连接。所有的相关数据操作使用一个公共数据类来实现。
⑴新建一个类文件,命名为“DataClass.cs”,添加GetSqlServerConn方法,用于获得数据库连接(代码25-1.txt)。
01 private SqlConnection GetSqlServerConn()
02 {
03 SqlConnection sqlConn; //定义SQl Server连接对象
04 string strConn = WebConfigurationManager.ConnectionStrings["ch25DataBase"].ConnectionString; //读取Web.config配置文件的ConnectionString节点获取连接字符串
05 sqlConn= new SqlConnection(strConn); //生成数据库连接对象
06 sqlConn.Open(); //打开数据库连接
07 return sqlConn; //返回数据库连接对象以供调用
08 }
⑵继续添加CloseSqlServerConn方法,用于关闭数据库连接(代码25-2.txt)。
01 private void CloseSqlServerConn(SqlConnection sqlConn)
02 {
03 if (sqlConn.State==ConnectionState.Open) //如果数据库连接处于关闭状态,则打开此连接
04 {
05 sqlConn.Close();
06 }
07 }
25.3.4 保存广告信息代码设计
有了数据库连接,我们就可以通过它保存数据信息,得到相关的广告信息,系统可以将此信息保存至数据库。在公共类中继续添加SaveAdsInfo方法来保存广告相关信息内容(代码25-3.txt)。
01 public bool SaveAdsInfo(string strImageUrl, string strNavigateUrl, string strAlternateText, string strKeyword, string strImpressions)
02 {
03 string strComm = "insert into tabAdSystem(ImageUrl,NavigateUrl,AlternateText,Keyword,Impressions) values(@ImageUrl,@NavigateUrl,@AlternateText,@Keyword,@Impressions)";
04 SqlConnection sqlConn= this.GetSqlServerConn(); //调用GetSqlServerConn()方法获得数据库连接
05 SqlCommand sqlComm= new SqlCommand(); //生成数据库命令操作对象
06 try
07 {
08 sqlComm.CommandText= strComm; //指定要执行的SQL命令
09 sqlComm.Connection= sqlConn; //指定要使用的SQL连接
10 sqlComm.Parameters.AddWithValue("@ImageUrl", strImageUrl); //为SQL命令的参数赋值
11 sqlComm.Parameters.AddWithValue("@NavigateUrl", strNavigateUrl);
12 sqlComm.Parameters.AddWithValue("@AlternateText", strAlternateText);
13 sqlComm.Parameters.AddWithValue("@Keyword", strKeyword);
14 sqlComm.Parameters.AddWithValue("@Impressions", strImpressions);
15 sqlComm.ExecuteNonQuery();
16 return true;
17 }
18 catch (Exception ex)
19 {
20 return false;
21 }
22 finally
23 {
24 CloseSqlServerConn(sqlConn); //关闭数据库连接
25 }
26 }
25.3.5 显示广告代码设计
广告信息在用户浏览网站时可以显示给用户,用户对感兴趣的广告可以单击浏览。广告的显示需要XML文件来实现。在App_Data文件夹中新建一个XML文件,命名为“AdSample.ads”,然后输入以下代码用于在<Advertisements>< /Advertisements>标签对中写入广告信息(代码25-4.txt)。
01 <?xml version="1.0" encoding="utf-8"?>
02 <Advertisements>
03 < /Advertisements>
Advertisements标签对之间有一些常用标签,其作用如表所示。
在公共类中添加createXmlDoc方法用于生成XML操作对象(代码25-5.txt)。
01 private XmlDocument createXmlDoc()
02 {
03 XmlDocument xmldoc= new XmlDocument(); //生成XML文档对象
04 xmldoc.Load(HttpContext.Current.Server.MapPath("~/App_Data/AdSample.ads")); //加载指定的XML文档
05 return xmldoc; //返回生成的XML文档对象
06 }
在公共类中添加GetAdsInfoToXml方法用于生成XML广告信息(代码25-6.txt)。
01 public bool GetAdsInfo ToXml()
02 {
03 string strComm = "select ImageUrl,NavigateUrl,AlternateText,Keyword,Impressions from tabAdSystem";
04 SqlConnection sqlConn= this.GetSqlServerConn(); //调用GetSqlServerConn()方法获得数据库连接
05 SqlCommand sqlComm= new SqlCommand(); //生成数据库命令操作对象
06 SqlDataReader sdr= null;
07 try
08 {
09 XmlDocument xmldoc= createXmlDoc(); //获取XML文档对象
10 XmlNode root= xmldoc.SelectSingleNode("Advertisements"); //获取XML配置文件根节点
11 root.RemoveAll(); //删除XML文件所有的广告节点,防止重复
12 sqlComm.CommandText= strComm; //指定要执行的SQL命令
13 sqlComm.Connection= sqlConn; //指定要使用的SQL连接
14 sdr= sqlComm.ExecuteReader();
15 while (sdr.Read()) //读取数据添加到XML文件中
16 {
17 XmlElement xeAd= xmldoc.CreateElement("Ad"); //创建一个<Ad>节点
18 XmlElement xeSub= xmldoc.CreateElement("ImageUrl"); //创建一个<ImageUrl>节点
19 xeSub.InnerText= sdr["ImageUrl"].ToString(); //设置<ImageUrl>节点文本节点
20 xeAd.AppendChild(xeSub); //添加到<Ad>节点中
21 xeSub= xmldoc.CreateElement("NavigateUrl"); //创建一个<NavigateUrl>节点
22 xeSub.InnerText= sdr["NavigateUrl"].ToString(); //设置<NavigateUrl>节点文本节点
23 xeAd.AppendChild(xeSub); //添加到<Ad>节点中
24 xeSub= xmldoc.CreateElement("AlternateText"); //创建一个<AlternateText>节点
25 xeSub.InnerText= sdr["AlternateText"].ToString(); //设置<AlternateText>节点文本节点
26 xeAd.AppendChild(xeSub); //添加到<Ad>节点中
27 xeSub= xmldoc.CreateElement("Keyword"); //创建一个<Keyword>节点
28 xeSub.InnerText= sdr["Keyword"].ToString(); //设置<Keyword>节点文本节点
29 xeAd.AppendChild(xeSub); //添加到<Ad>节点中
30 xeSub= xmldoc.CreateElement("Impressions"); //创建一个<Impressions>节点
31 xeSub.InnerText= sdr["Impressions"].ToString(); //设置<Impressions>节点文本节点
32 xeAd.AppendChild(xeSub); //添加到<Ad>节点中
33 root.AppendChild(xeAd); //添加到根节点<Advertisements>中
34 }
35 xmldoc.Save(HttpContext.Current.Server.MapPath("~/App_Data/AdSample.ads")); //将内存中的XML结构保存到磁盘上
36 return true;
37 }
38 catch (Exception ex)
39 {
40 return false;
41 }
42 finally
43 {
44 CloseSqlServerConn(sqlConn); //关闭数据库连接
45 }
46 }
25.3.6 保存广告信息事件代码设计
用户输入相关的广告信息之后,单击【提交】按钮可以保存广告信息。在Default.aspx设计页面双击“提交”按钮自动添加事件btnSubmit_Click方法,添加以下代码(代码25-7.txt)。
01 protected void btnSubmit_Click(object sender,EventArgs e)
02 {
03 StringBuilder sbFileName;
04 DataClass dc= new DataClass();
05 if (!String.IsNullOrEmpty(this.fileUpAddress.FileName))
06 {
07 sbFileName= new StringBuilder();
08 sbFileName.Append(DateTime.Now.Year);
09 sbFileName.Append(DateTime.Now.Month);
10 sbFileName.Append(DateTime.Now.Day);
11 sbFileName.Append(DateTime.Now.Hour);
12 sbFileName.Append(DateTime.Now.Minute);
13 sbFileName.Append(DateTime.Now.Second);
14 sbFileName.Append(DateTime.Now.Millisecond);
15 sbFileName.Append(Path.GetExtension(this.fileUpAddress.FileName));
16 this.fileUpAddress.SaveAs(Server.MapPath("~/images/")+ sbFileName.ToString());
17 bool bResult = dc.SaveAdsInfo(Server.MapPath("~/images/" + sbFileName.ToString()),this.txtNavigateUrl. Text,this.txtAlternateText.Text,this.txtKeyword.Text,this.txtImpressions.Text);
18 if (bResult)
19 {
20 Response.Write("<script>alert('保存成功! ')< /script>");
21 }
22 else
23 {
24 Response.Write("<script>alert('保存失败! ')< /script>");
25 }
26 }
27 }
25.3.7 关闭当前页面事件代码设计
用户在广告信息保存页面单击【取消】按钮,可以关闭当前页面。在Default.aspx设计页面<title>< /title>标签对之后添加以下代码(代码25-8.txt)。
01 <script language="javascript" type="text/javascript">
02 function closeWindow() {
03 window.close();
04 }
05 < /script>
25.3.8 显示广告信息事件代码设计
用户浏览网页的时候,广告信息可随机显示不同的广告内容,单击广告可显示相应的页面。在ShowAd.aspx设计页面空白处双击生成Page_Load窗体事件,添加以下代码(代码25-9.txt)。
01 protected void Page_Load(object sender,EventArgs e)
02 {
03 if (!IsPostBack) //判断是否第1次显示页面
04 {
05 DataClass dc= new DataClass();
06 dc.GetAdsInfoToXml();
07 }
08 }
25.4 运行系统
本节视频教学录像:2分钟
系统设计好了,下面来看系统运行的效果。
⑴按【F5】或【Ctrl+F5】快捷键,在浏览器中运行该程序,页面中将显示添加广告信息的界面,如图所示。
⑵单击【提交】按钮,可将输入的内容保存到数据库中,并返回提示信息。
⑶单击【取消】按钮,在弹出的对话框中单击【是】按钮,可以关闭当前Web窗体。
⑷用户浏览时可看到广告图片信息,如图所示。
⑸单击广告可浏览对应的页面,如图所示。
25.5 在我的网站中应用本系统
本节视频教学录像:1分钟
读者根据自己的需要,将相关代码拷贝至已有网站对应的位置即可运行。对数据库的连接信息和对应的字段信息可根据实际情况修改,更多的细化功能读者可自行练习,这里不再赘述。
25.6 开发过程中的常见问题及解决方式
本节视频教学录像:1分钟
开发过程中要注意广告控件的XML配置文件的格式,此格式是固定的,一定要按照标准来写。可能有的读者没有学过如何通过代码操作XML文件,我们这里只是给出了一段简单的代码,具体的相关应用请参阅MSDN的描述。