当前位置: 首页 > 文章教程  > 计算机与互联网 > 网络编程

第25章广告生成系统

8/31/2020 9:10:17 PM 人评论

第25章广告生成系统

第25章 广告生成系统

本章视频教学录像:16分钟

现代生活中,广告是必不可少的一种宣传手段,在网站中添加广告是一种非常流行的做法。本章介绍如何在网站中发布不同的广告信息。

本章要点(已掌握的在方框中打钩)

□ 了解广告显示的原理

□ 创建数据库和数据表

□ 设计系统前台页面

□ 设计广告生成代码

□ 将广告生成系统添加至已有网站中

25.1 系统分析

本节视频教学录像:2分钟

网站建成使用后,随着人气的提升,许多广告客户希望能在互联网上做广告来宣传自己的商品。本章使用ASP.NET和SQL Server 2008来创建一个广告生成系统。

figure_0553_0894

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中创建数据库的具体步骤如下。

⑴选择【开始】figure_0554_0895【所有程序】figure_0554_0896【Microsoft SQL Server 2008】figure_0554_0897【SQL Server Management Studio】,以【SQLServer身份验证】模式登录。

figure_0554_0898

⑵在【对象资源管理器】窗口中的【数据库】节点上右击,在弹出的快捷菜单中选择【新建数据库】菜单项,弹出【新建数据库】对话框。

figure_0554_0899
figure_0554_0900

⑶在【数据库名称】文本框中输入“ch25DataBase”,在【数据库文件】列表框中使用默认设置“ch25DataBase”和“ch25DataBase _log”文件的路径,然后单击【确定】按钮,即可完成ch25DataBase数据库的创建。

figure_0555_0901

25.2.3 创建数据表

本实例中需要一张记录上传文件相关信息的表,下面来创建数据表。

⑴在【对象资源管理器】中展开ch25DataBase节点,右击【表】节点,在弹出的快捷菜单中选择【新建表】菜单项。

figure_0555_0902

⑵在打开的表编辑窗口中,按照下表进行输入。

figure_0555_0903

⑶在【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页面的设计视图中,如图所示设计系统界面,所用控件及属性设置如表所示。

figure_0556_0904
figure_0556_0905

⑶在网站中添加一个名为“ShowAd.aspx”的Web页面,用于显示设置的广告信息。在设计视图中,如图所示设计系统界面,所用控件及属性设置如表所示。

figure_0556_0906
figure_0557_0907

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标签对之间有一些常用标签,其作用如表所示。

figure_0559_0908

在公共类中添加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】快捷键,在浏览器中运行该程序,页面中将显示添加广告信息的界面,如图所示。

figure_0562_0909

⑵单击【提交】按钮,可将输入的内容保存到数据库中,并返回提示信息。

figure_0562_0910
figure_0562_0911

⑶单击【取消】按钮,在弹出的对话框中单击【是】按钮,可以关闭当前Web窗体。

⑷用户浏览时可看到广告图片信息,如图所示。

figure_0563_0912

⑸单击广告可浏览对应的页面,如图所示。

figure_0563_0913

25.5 在我的网站中应用本系统

本节视频教学录像:1分钟

读者根据自己的需要,将相关代码拷贝至已有网站对应的位置即可运行。对数据库的连接信息和对应的字段信息可根据实际情况修改,更多的细化功能读者可自行练习,这里不再赘述。

25.6 开发过程中的常见问题及解决方式

本节视频教学录像:1分钟

开发过程中要注意广告控件的XML配置文件的格式,此格式是固定的,一定要按照标准来写。可能有的读者没有学过如何通过代码操作XML文件,我们这里只是给出了一段简单的代码,具体的相关应用请参阅MSDN的描述。

相关教程

共有条评论 网友评论

验证码: 看不清楚?