深入体验C#项目开发
}
throw new Exception(ex.Message,ex); }
finally
{ //关闭连接 con.Close(); }
return ds;
6. 添加留言回复信息
添加留言回复信息即将新发布的留言回复信息添加到系统库中,此功能是由方法AddReply(string message,string ip,int messageID)实现的。其具体实现流程如下。
(1) 从系统配置文件Web.config内获取数据库连接参数,并将其保存在connectionString内。
(2) 使用连接字符串创建con对象,实现数据库连接。
(3) 使用SQL添加语句,然后创建cmd对象准备插入操作。 (4) 打开数据库连接,执行新数据插入操作。
(5) 将数据插入操作所涉及的行数保存在result中。 (6) 插入成功则返回result值,失败则返回-1。 上述功能的对应实现代码如下。
public int AddReply(string message,string ip,int messageID) { string connectionString = ConfigurationManager.ConnectionStrings [\ SqlConnection con = new SqlConnection(connectionString); string cmdText = \ MessageID)VALUES(@Reply,@IP,GETDATE(),@MessageID)\ SqlCommand cmd = new SqlCommand(cmdText,con); ///创建参数并赋值 cmd.Parameters.Add(\ cmd.Parameters.Add(\ cmd.Parameters.Add(\ cmd.Parameters[0].Value = message; cmd.Parameters[1].Value = ip; cmd.Parameters[2].Value = messageID; int result = -1; try { ///打开连接 con.Open(); ///操作数据 result = cmd.ExecuteNonQuery(); } catch(Exception ex) { ///抛出异常 throw new Exception(ex.Message,ex); }
52
第2章 在线留言簿系统
}
}
}
finally
{ ///关闭连接 con.Close(); }
return result;
在上述各处理方法中,使用了SQL的查询、添加和删除语句,对系统数据库内的数据进行了操作处理。在现实Web应用系统中,各类应用的数据库相关操作都是基于上述3种操作的。SQL语句是数据库技术的核心知识之一,读者可以通过在百度中检索“SQL教程”关键字来获取其相关知识。
2005年12月18日,晴空万里
今天完成了数据库访问层的编码工作,压力顿时减轻了许多,决定抽出一点时间做一个技术总结。在ASP.NET程序中,常把经常用到的设置性信息保存到数据库中,这些信息对于每一个访问用户都是相同的。若每一个用户访问时,都要去数据库里取出来,然后显示给用户,会加重数据库服务器负载,使之无法快速服务于更重要的事务处理。而且Web服务器也必须不停地创建ADO对象,从而消耗大量资源,导致当用户很多时几乎失去响应。如果能把一些常用信息事先存储在内存中,当用户访问时,直接从内存中取出,显示给用户,则可以大大减小系统的压力,提高响应速度。
在具体应用时,可以把已经取得了数据的RecordSet对象存储在Application变量中。当用户访问时,从Application变量中取得RecordSet对象,而不需再次建立数据库连接。也可以将RecordSet对象里的数据存储在数组中,然后再将数组存储在Application变量中,使用时用数组的方式读取。
另外,在此总结一下效率的问题。因为数据库技术是动态站点的基础,所以在Web程序内会有大量的查询语句。同时,随着站点访问量的增加,一个站点可能同时需要查询大量数据,所以数据库查询的效率问题便提上了日常议程。在此向读者提出如下两条建议。
(1) 合理使用索引。
并不是所有索引对查询都有效,SQL是根据表中数据来进行查询优化的,当索引列有大量重复数据时,SQL查询可能不会去利用索引,如一表中有字段sex,male、female几乎各一半,那么即使在sex上建了索引也对查询效率起不了作用。读者可以通过在百度中检索“索引效率优化”关键字来获取相关知识。
(2) 使用存储过程。
存储过程是一个很好的工具,它不但提高了程序的安全性,而且也提高了数据处理效率。编写合理的语句可以决定存储过程和触发器的效率。
总结完毕之后,我决定早点休息,为接下来的具体编码阶段做准备。
53
深入体验C#项目开发 2.6 编 码 实 现
2005年12月19日,上午,阳光明媚
因为在系统框架设计中,我已经编写好了共用类,完成了数据访问层的设计,所以编码工作的思路就十分清晰了。D只需在我已经编写类的基础上进行扩充,即可完成整个编码工作。最后的编码工作很重要,所以我让思维最敏捷的D来完成。今天我把需要的前期资料(规划书、数据库设计、框架设计、类设计)都交给了D。
2005年12月20日,上午,多云间阴,出现波澜
5天过去了,和D约定的交付时间已经到了,但是我一直没有看见D的踪影。无奈之下,我给他打了一个电话。原来他女友父母从老家来看他,这几天陪他们去逛大明湖、千佛山了,明天准备去趵突泉,一直抽不出身来做项目。此时的我意识到了问题的严重性,D已经没有时间来完成项目了,我只好硬着头皮上架,做出了如下两个决定。
(1) 找学生会主席CH出面和学校沟通,再宽限5天,我们保证完成任务。 (2) 我尝试完成D的任务。
幸好学校很宽容,宽限了我们5天,而我只能通宵达旦??
2.6.1 留言数据显示
1. 留言数据显示模块
留言数据显示模块的功能是,将系统库内的留言信息以列表的样式显示出来,并提供新留言发布表单,将发表的数据添加到系统库中。上述功能的实现文件如下。
? 文件Index.aspx。 ? 文件Index.aspx.cs。 ? 文件Yanzhengma.aspx。 ? 文件AjaxService.cs。 1) 留言列表显示页面
文件Index.aspx的功能是,插入专用控件将系统内数据读取并显示出来,然后提供发布表单供用户发布新留言。其具体实现流程如下。
? 插入1个GridView控件,以列表样式显示库内的数据。 ? 在表格内显示各留言的数据内容。
? 添加3个链接供留言发布、留言回复和留言管理操作。
? 调用Ajax程序集内的DynamicPopulate控件,实现面板显示留言回复内容。 文件Index.aspx中,留言列表显示页面的主要实现代码如下。
<%@ Page Language=\ StylesheetTheme=\…
54
第2章 在线留言簿系统