c#练笔_计数器(读书活动专题小记录)
话说区要搞比赛,我搞好了读书专题站点后感觉还不很差就话交了。点之到交前的一天.领导才话要看附件,我看了后,很不开心哦。因为有好多要求的。最重要的要求到不是不能达到,而是时间不够了。呜呼,不过,我还是搞了两个技术点才交上去.好,来正题;
1、复习了flash插入页面中“插入层--在层中再插入flash”,而且加一句<param name=wmode value=transparent>在<embed src=前。ok了。
2、话要有阅读次数,那好,数据库中本来就有cishu一字段,我就在cs文件中的写入db中加入一句,当复习,先在view页面定义几个label来用然后就在源码中写:
int newsid = Convert.ToInt32(Request.QueryString["id"].ToString());
string strConnection = @"Provider=Microsoft.Jet.OleDb.4.0;Data Source=" + Server.MapPath("dir\\db.mdb");
//创建数据库连接对象
OleDbConnection myconn = new OleDbConnection(strConnection);
//打开数据库连接
myconn.Open();
string sql = "select A.Title,A.Content,A.AddTime,A.Author,A.ReadCishu,A.flash_http_type, B.BigClassName from News A ,BigClass B Where B.BigClassID = A.BigClassID And A.ID =" + newsid;
//创建数据库命令
OleDbCommand mycmd = new OleDbCommand(sql, myconn);
OleDbDataReader dr = mycmd.ExecuteReader();
if (dr.Read())//读出内容
{
lbTitle.Text = dr["Title"].ToString();
lbContent.Text = dr["Content"].ToString();
lbAuthor.Text = dr["Author"].ToString();
lbDate.Text = dr["AddTime"].ToString();
flash_http_type = dr["flash_http_type"].ToString();
Label1.Text = dr["ReadCishu"].ToString();
}
//写一次增加访问
string sql_cishu = "update News set ReadCishu='" + dr["ReadCishu"] + "'+1 where ID=" + newsid;
mycmd = new OleDbCommand(sql_cishu, myconn);
mycmd.ExecuteNonQuery();
myconn.Close()
3、要求话要有计数器:哈哈,这是我很久前写过的,03年时候是用asp写,06年时候是用vb.net写,现在09年用用c#搞一个了。哈哈。我对c#有信心:
cs文件代码:
protected void Page_Load(object sender, EventArgs e)
{
string app_path = Server.MapPath("").ToString ();
//这里如果更完善看更新插入的新行,也可以不要
string counter_file=app_path+"\\"+"ms.cnt/";//定义该目录下的ms.cnt为计数器文件
string HitRate, tempNo,imgName; // 'HitRate是点击率
StreamReader txtReader = File.OpenText(counter_file);
HitRate=txtReader.ReadLine ().Trim ();//读行
txtReader.Close();
//如果符合条件
if (Session["On_line2"] == null)
{
Session["On_line2"] = true;
tempNo = System.Convert.ToString(System.Convert.ToInt32(HitRate) + 1);//中间取得值
StreamWriter txtWriter = File.CreateText(counter_file);
txtWriter.WriteLine(tempNo);//写行
txtWriter.Close();
}
// Response.Write(HitRate);//文字形式输出
for (int i = 1; i <= HitRate.Length; i++)//图形方式输出
{
imgName = HitRate.Substring(i-1,1);//因为从0开始计算位置的,所以i-1
Response.Write("<img src='pic/" + imgName + ".gif'>");
}
}
public void Application_Start(Object S, EventArgs E)
{
Application["Counter"] = 0;
//'第一次启动Application时将CurrentUsers归零
Application["CurrentUsers"] = 0;
}
public void Session_Start(Object S, EventArgs E)
{
//'On_line标志设成False,表示第一次连接到该站点
Session["On_line"] = false; // '第一次连接,所以赋值false
Session["On_line2"]=false ; //'避免多人连接时候在没有超时又再重新加载页面出错准备。
//'指定Session的TimeOut属性(默认值是20分钟)
Session.Timeout = 10;
Application.Lock();
//'每有一人连接,CurrentUsers便加一
Application["CurrentUsers"] = System.Convert .ToInt32 (Application["CurrentUsers"]) + 1;
Application.UnLock();
}
public void Session_End(Object S, EventArgs E)
{
Application.Lock();
//'每有一人离线,CurrentUsers便减一
Application["CurrentUsers"] = System.Convert .ToInt32 (Application["CurrentUsers"]) - 1;
Application.UnLock();
}
public void Application_End(Object S, EventArgs E)
{
}
解析就不再做了。就是用了文件类StreamReader和StreamWriter打开/写入文件。其中,考虑到刷新和session的应用配合,务求访问人次的统计真实有效。最后以图形输出。ok,当然,我们更好的是可以用creatfile生成计数器文件先。这也是很简单的事情的哦修改几行而已
string app_path = Server.MapPath(".")+ "\\" + "ms.cnt";
//判断是否存在计数器文件
if (File.Exists(app_path)==false)
{
StreamWriter txtWriter = File.CreateText(Server.MapPath(".") + "\\" + "ms.cnt");
txtWriter.WriteLine(1);//写行,定为1
txtWriter.Close();
}
string counter_file=app_path..........如果是新手,好好研究下啊。
交了文件就去长隆玩:十环过山车>摩托过山车>垂直过山车>魔术表演>午餐>异国风情>u型滑板>4D恐龙电影>惊爆危机岛