Windows OS/VS 2010(C#)、SQL SERVER 2008
1、 通过 VS2010创建空ASP.NET网站。添加2个WEB窗体:login.aspx,myhome.aspx
2、 添加新项Visual C# Web窗体:login.aspx。
1) 设置窗体Title为:登录页
2) 在login.aspx中,使用工具箱->标准:添加3个Labl、2个TextBox、2个Button控件
3) 设置控件属性
a) ID:Label1、Label2、Label3、txtUserName、txtPwd、btnLogin、btnReset
b) 设置Label标签的Text属性分别为:用户名、密码、请输入用户名
c) 设置Button按钮的Text属性分别为:登录、重写
上图即login页面的效果图:添加了 3 个 Label、2 个 TextBox、2 个Button 控件,分别为用户名、密码、提示输入的文字,和两个Button按钮控件,分别用来是现登录重定向到下面的myhome窗体功能和将输入的信息清除的功能。
2.4设置Button控件Click时间响应函数
BtnLogin的Click事件:
获取TextBox控件txtUserName、txtPwd的输入值(可通过对象的属性或者Request.form集合获取相应的变量与变量值)
检查txtUserName、txtPwd的值是否为合法用户,如:用户名为“张三”,密码为“1234”,如果是的话,则创建Session变量保存当前的登录用户名与密码,再重定向至myhome.aspx;否则的话,将Label3的Text属性设置为:请输入正确的用户名与密码!
上两个图是利用当前的登录用户名与密码进行判断,若正确,重定向至 myhome.aspx;否则的话,将 Label3 的 Text 属性设置为:请输入正确的用户名与密码!
BtnReset的Click事件:将TextBox控件txtUserName、txtPwd清空。
添加新项Visual C# Web窗体:myhome.aspx。
1、 设置窗体Title为:我的空间
2、 在myhome.aspx中,使用工具箱->标准:添加3个Label,1个Button。
3、设置控件属性:
ID:Label1、Label2、Label3,btnLogout
设置 3 个 Label 标签的 Text 属性分别为:欢迎您来到您的空间!
设置 Button 的 Text 属性为:退出。
4、在myhome.aspx.cs的Page_Load响应函数中:
通过 Session 变量,验证当前用户是否已登录,如未登录则重定向至login.aspx。
设置 Label2.Text 值为:当前用户名和密码,即 Session 中保存的用户名和密码
设置 Label3.Text 值为:输出当前系统时间。
5、设置btnLogout的Click响应函数
退出当前 Session;
重定向到 login.aspx 窗体。
使用实验二.pdf 文档,通过 VS2010 创建简单的用户名/密码验证页面。(此处不赘
述)。
2、SQL Server2008 库/表。
1)启动 SQL Server2008 的 SQL Server Management Stuido,附加 NetSchool 数据库
(NetSchool_Data.MDF/NetSchool_Log.LDF),查看其中的 STUDENT/STUDENT_CLAS 表。
请通过查询,尝试相关 SQL 语句(Select、Insert、Update、Delete)并掌握。
2)创建数据库连接字符串,通过在 VS2010 中的服务器资源管理器中,添加数据库连接,
得到该数据库连接的 ConnectionString。【其中 SQL Server 身份认证为:sa/123456】
由于是在自己的计算机上做的,所以参数有些不同。
SqlConnection conn;
conn = new SqlConnection("Data Source=(local);Initial Catalog=NetSchool;Integrated Security=True");
string str1 = @"SELECT * FROM [NetSchool].[dbo].[STUDENT] where USERID='" + strU + @"' and PASSWORD ='" + strP + "'";
cmd = new SqlCommand(str1, conn);
3)请根据第七章的 ADO.NET 中的面向连接访问方式,在 login.aspx 的 btnLogin 的 Click
事件中修改代码,使得原先的静态用户名/密码验证为,数据库 Netschool 中 Student 表
中已有的用户才能够登录。
3.1 静态用户名/密码验证代码(此次实验需要重新修改):
3.2 动态验证。支持当前 STUDENT 表中的所有用户能够登录当前系统。
图 2 连接式访问数据库程序框架
3.2.1 添加数据库托管程序支持:using System.Data.SqlClient;
3.2.2 根据图2 所示步骤,重写撰写 protected void btnLogin_Click(object
sender, EventArgs e) { }响应函数。
3.2.3 其中判定是否有该登录用户名/密码,可利用 DataReader 对象的 READ 方法
或者 HasRows 属性,作为判断依据。
4.在 myhome.aspx 页面中添加 ListBox 控件、Button 控件。
4.1 修改 Button 控件:ID 为:btnSeachMyclass。Text 属性:查询
4.2 修改 ListBox 控件:ID 为:ListBMyClass。在 Page_Load 中,通过程序对其初
始化,添加一个 Item 项目“我所选修的课程”。
4.3 在对应的 btnSeachMyclass_Click(){ }函数中进行 Code,是的点击该按钮
后,将当前登录用户的所有选修课程的 ClassID 以 Item 的方式显示在 ListBox 控件中。
注意:login.aspx 中用户名输入,请输入 STUDENT 表中的 USERID 值。
原理:
1、通过服务器控件获取用户输入后,合法用户则创建相应的Session变量,并进行合适的网页重定向。同时熟悉DateTime类。
2、通过服务器控件获取用户输入后,合法用户则创建相应的 Session 变量,并进行合适的网页重定向,并在 myHome.aspx 网页中显示相应的个人相关记录。其中:合法用户的判断规则:未使用数据库/表时,启用静态用户名/口令验证原则: 未使用数据库/表时,启用静态用户名/口令验证原则:否则,通过查询 MySite 数据库中 Users 表中是否有该用户/密码,为准。
实验步骤:见实验内容。
1、对于用户名和密码的显示需要跨页面传递数据,解决办法是利用Session进行跨页面的数据传递进行记录,
Session["S_uname"] = txtUserName.Text;
Session["S_upwd"] = txtPwd.Text;
Label2.Text = "当前用户为:" + Session["S_uname"].ToString() + "密码为:" + Session["S_upwd"].ToString();
Label3.Text = "当前时间为:" + System.DateTime.Now.ToString();
2、控件的操作很繁琐
解决办法是为每个空间配置相应的属性如ID和动作如Clicked等都很繁琐,还好VS的集成性很好,可以利用拆分的双视图进行编辑。
3、数据库的操作很繁琐
解决办法是可以在视图界面进行配置,包括控件的各种属性也是如此。在操作数据库的过程中,出现了很多的问题,由于对SQL SERVE数据库不熟悉,所以在处理解决问题上很费力,但还是没有很好的方法解决,通过查阅资料,向同学了解之后才能勉强做。
最终我按照要求,利用VS,编写出了一个简单的动态网页,包括两个2 个 WEB 窗体:login.aspx,myhome.aspx。利用各种控件,实现了登录页面的验证与重定向,对于信息的记录显示与时间的展示以及退出函数的实现。还使用数据库进行了用户合法性的判断,还读取数据库中的数据到ListBox中显示给用户查询,效果如前面各个图片。
通过本次实验,使得我对于网络程序设计有了更深的认识,也印证了我们在课堂上学习的内容,熟悉 了HTML 服务器控件,特别是 FORM 表单服务器控件的设置。印证了我们在课堂上学习的关于数据库的内容,熟悉了对于数据库的连接和对其中数据库数据的操作,熟悉了ListBox控件,通过对数据库数据来动态验证用户的合法性,更具有实用性。本次实验还使我对于VS的使用也有了很大的进步。
通过这次实验,我懂得了理论与实际相结合是很重要的,只有理论是远远不够的,只有把所学的理论知识与实践相结合起来,从理论知识与实践相结合,从理论中得出结论,才是真正的知识,才能提高自己的事迹动手能力和独立思考的能力。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data.SqlClient;
public partial class login : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void btnLogin_Click(object sender, EventArgs e)
{
string strU = txtUserName.Text;
string strP = txtPwd.Text;
SqlConnection conn;//定义一个连接对象
SqlCommand cmd;//定义一个命令对象
SqlDataReader rd;//定义一个读取数据对象
conn = new SqlConnection("Data Source=(local);Initial Catalog=NetSchool;Integrated Security=True");
conn.Open();
string str1 = @"SELECT *
FROM [NetSchool].[dbo].[STUDENT]
where
USERID='" + strU + @"'
and
PASSWORD ='" + strP + "'";//此为SQL操作字符串
cmd = new SqlCommand(str1, conn);
rd = cmd.ExecuteReader();//执行查询操作
if (rd.HasRows)
{
Session["S_uname"] = txtUserName.Text;
Session["S_upwd"] = txtPwd.Text;
rd.Close();
conn.Close();
Response.Redirect("myhome.aspx");
}
else
{
Label3.Text = "请输入正确用户名和密码";
}
}
protected void btnReset_Click(object sender, EventArgs e)
{
txtUserName.Text = null;
txtPwd.Text = null;
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data.SqlClient;
public partial class myhome : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (Session["S_uname"] == null)//防止直接进入myhome窗体
{
Response.Redirect("login.aspx");
}
Label2.Text = "当前用户为:" + Session["S_uname"].ToString() + "密码为:" + Session["S_upwd"].ToString();
Label3.Text = "当前时间为:" + System.DateTime.Now.ToString();
ListBMyClass.Items.Clear();
ListBMyClass.Items.Add("我所需选修的课程");//在下拉列表中新增一项
}
protected void btnSeachMyclass_Click(object sender, EventArgs e)
{
SqlConnection conn;
SqlCommand cmd;
SqlDataReader rd;
conn = new SqlConnection("Data Source=(local);Initial Catalog=NetSchool;Integrated Security=True");
conn.Open();
string str1 = @"SELECT *
FROM STUDENT_CLASS
where
USERID='" + Session["s_name"].ToString() + "'";
cmd = new SqlCommand(str1, conn);
rd = cmd.ExecuteReader();
while (rd.Read())//常见的使用方法:循环调用SqlDataReader对象的read方法来遍历所有行
{
ListBMyClass.Items.Add(rd["CLASSID"].ToString());
// ListBMyClass.Items.Add(new ListItem(rd["CLASSID"].ToString(), rd["CLASSID"].ToString()));
}
rd.Close();
conn.Close();
}
protected void Button1_Click(object sender, EventArgs e)
{
}
protected void ListBox1_SelectedIndexChanged(object sender, EventArgs e)
{
}
protected void btnLogout_Click(object sender, EventArgs e)
{
Response.Redirect("myhome.aspx");
}
}
Login.窗体中:
SqlConnection conn;//定义一个连接对象
SqlCommand cmd;//定义一个命令对象
SqlDataReader rd;//定义一个读取数据对象
conn = new SqlConnection("Data Source=(local);Initial Catalog=NetSchool;Integrated Security=True");
conn.Open();
string str1 = @"SELECT *
FROM [NetSchool].[dbo].[STUDENT]
where
USERID='" + strU + @"'
and
PASSWORD ='" + strP + "'";//此为SQL操作字符串
cmd = new SqlCommand(str1, conn);
rd = cmd.ExecuteReader();//执行查询操作
myhome窗体中:
SqlConnection conn;
SqlCommand cmd;
SqlDataReader rd;
conn = new SqlConnection("Data Source=(local);Initial Catalog=NetSchool;Integrated Security=True");
conn.Open();
string str1 = @"SELECT *
FROM STUDENT_CLASS
where
USERID='" + Session["s_name"].ToString() + "'";
cmd = new SqlCommand(str1, conn);
rd = cmd.ExecuteReader();