当前位置: 首页 > 图文教程 > 网络编程 > ASP.NET > 从一个舆论调查的制作谈面向对象的编程思路(二)

ASP.NET
.Net技术开发中两个“属性”引起的歧异
技术文档:解读.Net虚拟框架的实现原理
.Net课堂:总结必须学习的10项.NET技术
实现MSMQ消息加密的安全实践
C#中对DatagridView的部分常用操作
.Net基础:了解ASP.NET中的IFRAME框架挂马
ASP.NET中显示Linq To SQL输出的SQL语句
链表的顺序表示和实现(C++模板类实现)
如何在ASP.NET项目里面正确使用Linq to Sql
ASP.NET两个截取字符串的实用方法技巧
一个简单程序的反编译
ASP.NET MVC中你必须知道的13个扩展点
Entity Framework的默认值BUG解决方法
C#中通过Assembly类访问程序集信息
Java与.NET间进行Web Service交互的选择
C#中用鼠标移动页面功能的实现
程序员的信仰
ASP.NET多附件上传和附件编辑的实现
菜鸟课堂:在Visual C# .NET中跟踪和调试
IronPython和C#执行速度对比

ASP.NET 中的 从一个舆论调查的制作谈面向对象的编程思路(二)


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-11-03   浏览: 125 ::
收藏到网摘: n/a

首先,我们要来定义一个数据库表,以保存舆论调查的想关数据,看下面这个表:
/*新闻调查表*/
if exists(select * from sysobjects where id = object_id('Survey'))
drop table Survey
go

create table Survey
(
ID int identity Primary key not null ,
SurveyID varchar(20) default "" not null ,
Kind tinyint default 0 not null ,
Title nvarchar(100) default "" not null ,
Description nvarchar(255) default "" not null ,
Amount int default 0 not null ,
BeginTime datetime default getdate() not null ,
EndTime datetime default getdate() not null ,
Active bit default 0 not null
)
go

好了,数据库建好了,我可以从上面的survey基类中继承出具体的子类,比如说我现在要做一个同足球相

关的调查,那就做这么一个类:

namespace Football
{
using System;
using MyClass.Util ;
using System.Data.SQL ;
using System.Collections ;
/// <summary>
/// 足球舆论调查
/// </summary>
/// <remarks>
/// 从MyClass.Util.Survey类继承而来
/// </remarks>
public class FootballSurvey : MyClass.Util.Survey
{


public FootballSurvey()
{
}


/// <summary>
/// 重载父类虚函数
/// </summary>
/// <param name="a_intID">该调查的数据库id </param>
public override void LoadFromDatabase(string a_strID)
{
MyClass.Util.MyConnection myConn = new MyConnection() ;
SQLCommand myCommand = new SQLCommand() ;
myCommand.CommandText = "up_GetSurvey" ;
myCommand.CommandType = System.Data.CommandType.StoredProcedure ;

try
{
myConn.Open() ;
myCommand.ActiveConnection = myConn ;
myCommand.Parameters.Add(new SQLParameter("@a_strsurveyid" ,

SQLDataType.VarChar , 20)) ;
myCommand.Parameters["@a_strsurveyid"].Value = a_strID ;
SQLDataReader myReader ;
myCommand.Execute(out myReader) ;

//先取调查
if (myReader.Read())
{
this.m_strTitle = myReader["title"].ToString() ;
this.m_intHits = (int)myReader["amount"] ;
this.m_strID = a_strID ;
this.m_datBeginTime =

(DateTime)myReader["begintime"] ;
this.m_datEndTime = (DateTime)myReader["endtime"] ;
}
else
{
throw(new Exception("数据库中无此调查的纪录")) ;
}

//清空调查项
m_arrItems.Clear() ;

//取调查项
if (myReader.HasMoreRows)
{
while(myReader.Read())
{
SurveyItem item = new SurveyItem() ;
item.Text = myReader["title"].ToString() ;
item.ID = (int)myReader["id"] ;
item.Count = (int)myReader["amount"] ;
item.Description =

myReader["Description"].ToString() ;
AddItem(item) ;
}
}
else
{
throw(new Exception("数据库中没有该调查相关的调查项

")) ;
}

//清场
myReader.Close() ;
myConn.Close() ;
}
catch(Exception e)
{
throw(new Exception("从数据库中读取调查失败:" +

e.ToString())) ;
}
}


/// <summary>
/// 将调查保存到数据库
/// </summary>
/// <param name="m_strSurveyID">调查编号 </param>
/// <remarks>
/// 如果m_strSurveyID不为空,则删除原纪录,用当前调查编号保存新的调查,
/// 否则就生成一个新的调查编号
/// </remarks>
public override void SaveToDatabase(string m_strSurveyID)
{
//如果没有标题或调查项则抛出异常
if (this.m_arrItems.Count == 0 || this.m_strTitle == "")
{
throw(new Exception("没有调查标题或标题项")) ;
}

MyClass.Util.MyConnection myConn = new MyConnection() ;
SQLCommand myCommand = new SQLCommand() ;
myCommand.CommandType = System.Data.CommandType.Text ;

try
{
myConn.Open() ;
myCommand.ActiveConnection = myConn ;

//如果没有surveyid则生成surveyid
string strSurveyID ;
if(m_strSurveyID == "")
{
strSurveyID = DateTime.Now.Year.ToString()
+

DateTime.Now.Month.ToString()
+

DateTime.Now.Hour.ToString()
+

DateTime.Now.Minute.ToString()
+

DateTime.Now.Second.ToString()
+

DateTime.Now.Millisecond.ToString() ;
}
else //如果已有,则删除该条纪录
{
strSurveyID = m_strSurveyID ;
//删除原有