快精灵印艺坊 您身边的文印专家
广州名片 深圳名片 会员卡 贵宾卡 印刷 设计教程
产品展示 在线订购 会员中心 产品模板 设计指南 在线编辑
 首页 名片设计   CorelDRAW   Illustrator   AuotoCAD   Painter   其他软件   Photoshop   Fireworks   Flash  

 » 彩色名片
 » PVC卡
 » 彩色磁性卡
 » 彩页/画册
 » 个性印务
 » 彩色不干胶
 » 明信片
   » 明信片
   » 彩色书签
   » 门挂
 » 其他产品与服务
   » 创业锦囊
   » 办公用品
     » 信封、信纸
     » 便签纸、斜面纸砖
     » 无碳复印纸
   » 海报
   » 大篇幅印刷
     » KT板
     » 海报
     » 横幅

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

首先,我们要来定义一个数据库表,以保存舆论调查的想关数据,看下面这个表:
/*新闻调查表*/
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 ;
//删除原有纪录
myCommand.CommandText = \"delete from survey where

surveyid=\\\'\" + strSurveyID + \"\\\'\" ;
myCommand.ExecuteNonQuery() ;
}

string strSql = \"insert into survey(surveyid , kind , title)

values (\\\'\"
+ strSurveyID +\"\\\', 0 , \\\'\" +

m_strTitle + \"\\\')/r/n\" ;
for (int i = 0 ; i < m_arrItems.Count ; i ++)
{
strSql += \"insert into survey(surveyid , kind ,

title) values(\\\'\"
+ strSurveyID + \"\\\' , 1 , \\\'\"
+ ((SurveyItem)m_arrItems[i]).Text +

\"\\\')/r/n\" ;
}
//插库
myCommand.CommandText = strSql ;
myCommand.ExecuteNonQuery() ;

//清场
myConn.Close() ;
}
catch(Exception e)
{
throw(new Exception(\"保存调查时出错:\" + e.ToString())) ;
}

}

/// <summary>
/// 投票
/// </summary>
/// <param name=\"a_intID\"> </param>
public override void Vote(int a_intID)
{
//该项计数加一
((SurveyItem)m_arrItems[a_intID]).Count += 1 ;

//数据库中改变
MyConnection myConn = new MyConnection() ;
SQLCommand myCommand = new SQLCommand() ;
myCommand.CommandText = \"update survey set amount=amount+1 where

id=\"
+

((SurveyItem)m_arrItems[a_intID]).ID.ToString() ;

myCommand.CommandType = System.Data.CommandType.Text ;

try
{
myConn.Open() ;
myCommand.ActiveConnection = myConn ;
myCommand.ExecuteNonQuery() ;
myConn.Close() ;
}
catch(Exception e)
{
throw(new Exception(\"更新调查项失败:\" + e.ToString())) ;
}

}

/// <summary>
/// 调查列表
/// </summary>
public static ArrayList SurveyList()
{
ArrayList arrResult = new ArrayList() ;
MyClass.Util.MyConnection myConn = new MyConnection() ;
SQLCommand myCommand = new SQLCommand() ;
myCommand.CommandText = \"select id , surveyid , title from survey

where kind=0 order by surveyid desc\" ;
myCommand.CommandType = System.Data.CommandType.Text ;

try
{
myConn.Open() ;
myCommand.ActiveConnection = myConn ;
SQLDataReader myReader ;
myCommand.Execute(out myReader) ;
while (myReader.Read())
{
FootballSurvey mySurvey = new FootballSurvey() ;
mySurvey.Title = myReader[\"title\"].ToString() ;
mySurvey.SurveyID = myReader[\"surveyid\"].ToString()

;
arrResult.Add(mySurvey) ;
}

myReader.Close() ;
myConn.Close() ;

}
catch(Exception e)
{
throw(new Exception(\"从数据库中取出调查失败:\" +

e.ToString())) ;
}

//返回结果
return arrResult ;
}

/// <summary>
/// 取得激活的调查id
/// </summary>
public static string GetActiveSurveyID()
{
string strResult = \"\" ;

MyClass.Util.MyConnection myConn = new MyConnection() ;
SQLCommand myCommand = new SQLCommand() ;
myCommand.CommandText = \"select top 1 id , surveyid from survey

where active=1 order by id desc\" ;
myCommand.CommandType = System.Data.CommandType.Text ;

try
{
myConn.Open() ;
myCommand.ActiveConnection = myConn ;
SQLDataReader myReader ;
myCommand.Execute(out myReader) ;
if (myReader.Read())
{
strResult = myReader[\"surveyid\"].ToString() ;
}
else
{
throw(new Exception(\"没有激活的调查\")) ;
}

myReader.Close() ;

}
catch(Exception e)
{
throw(new Exception(\"从数据库中取出调查失败:\" +

e.ToString())) ;
}
finally
{
myConn.Close() ;
}

//返回结果
return strResult ;

}

/// <summary>
/// 激活调查
/// </summary>
/// <param name=\"a_strSurveyID\">调查编号 </param>
public static void ActiveSurvey(string a_strSurveyID)
{
MyClass.Util.MyConnection myConn = new MyClass.Util.MyConnection() ;
SQLCommand myCommand = new SQLCommand() ;
myCommand.CommandText = \"update survey set active=0 ;\"
+ \"update survey set

active=1 where surveyid=\\\'\" + a_strSurveyID + \"\\\'\" ;
myCommand.CommandType = System.Data.CommandType.Text ;

try
{
myConn.Open() ;
myCommand.ActiveConnection = myConn ;
myCommand.ExecuteNonQuery() ;
}
catch(Exception exp)
{
throw(new Exception(\"保存激活调查到数据库出错:\" +

exp.ToString()));
}
finally
{
myConn.Close() ;
}
}

}
}


返回类别: 教程
上一教程: ASP.NET下MVC设计模式的实现
下一教程: .NET语言的选择 [特殊推荐] (转贴)

您可以阅读与"从一个舆论调查的制作谈面向对象的编程思路(二)"相关的教程:
· 从一个舆论调查的制作谈面向对象的编程思路(五)
· 从一个舆论调查的制作谈面向对象的编程思路(一)
· asp.net高级教程(二)--- 转变编程思维
· asp+版本简朴的留言板的制作(三)
· ADO.NET对象的构造(3)_DataTable(续)
    微笑服务 优质保证 索取样品