动态网页程序设计.docx

上传人:b****0 文档编号:12447597 上传时间:2023-04-19 格式:DOCX 页数:73 大小:753.33KB
下载 相关 举报
动态网页程序设计.docx_第1页
第1页 / 共73页
动态网页程序设计.docx_第2页
第2页 / 共73页
动态网页程序设计.docx_第3页
第3页 / 共73页
动态网页程序设计.docx_第4页
第4页 / 共73页
动态网页程序设计.docx_第5页
第5页 / 共73页
点击查看更多>>
下载资源
资源描述

动态网页程序设计.docx

《动态网页程序设计.docx》由会员分享,可在线阅读,更多相关《动态网页程序设计.docx(73页珍藏版)》请在冰豆网上搜索。

动态网页程序设计.docx

动态网页程序设计

第7次授课,0814101/2班,授课时间:

2013-11-19(周二、三\1,2节)

教学章节

第4章4.4用户控件和自定义控件

第5章其它服务器控件

教学目的要求

教学重点

Web技术与开发的基本概念

教学难点

教学环境

多媒体教室(10号教学楼A202),带笔记本电脑。

板书设计

Ppt

第7章数据库和ADO.NET

结合教材电子档讲解。

有必要讲一下SQLServer2005的使用

1、在系机房运行SQLServer2005数据库,先点击运行批处理文件(见图),再运行数据库。

1、关于SQLServer2005中数据库的数据库的查询,打开表后,可用sql作查询。

SQLServer2005的视图及存储工程

2、使用开发工具VS2005链接相关的数据库

3、VS2005系统中登录控件的使用。

用一个页面Createuser.aspx注册,注册成功后,自动建立了一个数据库到asp_data目录下。

用login.aspx页面登录,登录后自动进入到default.aspx页面

注意到:

1、数据的导入、导出。

2、查询工具的使用。

3、远程服务器的注册。

4、存储过程的使用

利用ADO.NET,在程序中使用存储过程。

两个示例。

网站Storweb的页面文件中调用存储过程,页面文件名为:

Ex81_stor.aspx和Ex82_stor.aspx。

事件中的代码见下页。

5、数据库的连接。

(可使用类)

小应用:

命令按钮的确认:

在命令按钮的属性:

OnClientClick中写入:

returnconfirm("真的要执行吗?

")

5.DataSet数据集及DataTable等对象

定义DataSet对象语法格式:

DataSet对象名=newDataSet()

说明在在DataSet可创建多表,体现其是内存中的数据库。

见示例DataAdapter_Reader中:

Datatable

上次讲的两个核心对象,讲到教材例7.18需要结合代码认真讲一下。

例7.18(教材207页)。

代码使用:

DataSet和DataAdapter不明晰,改造其代码。

见教材关于DataAdapter参数的叙述:

把:

SqlCommandMyCommand=newSqlCommand(SqlCommandString,MyConnection);

根据:

SqlDataAdapter对象名=newSqlDataAdapter(SQL语句,SqlConnection对象)

换为:

SqlDataAdapterMyCommand=newSqlDataAdapter(SqlCommandString,MyConnection);

带有两个参数,分别为SQL命令语句和Connection对象。

使用数据适配器DataAdapter后,就可填充数据集。

DataSetMyDataSet=newDataSet()

MyCommand.Fill(MyDataSet,"authors");

注意到:

使用数据适配器DataAdapter和DataSet只是使用连接,不需要打开和关闭。

既不需要:

MyConnection.Open();//打开连接

而在教材例7.17必须有:

MyConnection.Open();//打开连接

在教材例7.17中,也可使用:

GridView1.DataSource=MyReader;

GridView1.DataBind();

见示例:

DataAdapter_Reader

例7.19使用对象DataView实现数据的排序与过滤。

也可在sql语句中使用排序和过滤。

例7.20使用DataAdapter对象的Update方法实现数据的更新。

补充:

练习使用页面登录,及登录上的一些问题。

结合例7-17到7-20无非是在sql语句中加入了条件选择语句where。

1、使用类登录。

建立连接类:

DB.cs(见文件)。

publicstaticSqlConnectioncreateCon()

{

returnnewSqlConnection("Server=.;uid=sa;pwd=;database=dataname");

}

建立初始登录页,用户名和密码

usingSystem.Data.SqlClient;

注意到usingSystem.Web.Security;

SqlConnectionmyConn=DB.createCon();//对应上面类中的方法

分别用数据阅读器DataReader和数据适配器DataAdapter来实现登录

(1)使用数据阅读器

SqlCommandmyCommand=newSqlCommand("select*fromDepartmentwhereZGBM='"+this.TextBox1.Text.ToString()+"'andpasswd='"+this.TextBox2.Text+"'",myConn);

myConn.Open();

SqlDataReaderrecu=myCommand.ExecuteReader();

//或:

myCommand.ExecuteReader(CommandBehavior.CloseConnection);

if(recu.Read())//判断密码是否正确

{

//后勤服务中心登陆

Session["EmpName"]=recu["EmpName"].ToString();//名称

Response.Redirect("hqfuzx/hqc_main.aspx");//登录到页面

}

else

{

Response.Write("");

this.lblMsg.Text="用户名或密码错误!

";

}

myConn.Close();

说明:

若写成:

myCommand.ExecuteReader(CommandBehavior.CloseConnection);

则可:

MyReader.Close();则在关闭阅读器的同时,连数据库一起关闭。

(2)使用数据适配器

SqlDataAdaptermyDataAdapter=newSqlDataAdapter("select*fromDepartmentwhereZGBM='"+this.TextBox1.Text.ToString()+"'andpasswd='"+this.TextBox2.Text+"'",myConn);

DataSetds=newDataSet();

myDataAdapter.Fill(ds,"tab");

if(ds.Tables["tab"].Rows.Count>0)

{

//Lable.Text=ds.Tables["tab"].Rows[0]["字段名"];

Response.Redirect("hqfuzx/hqc_main.aspx");//登录到页面

}

else

{

Response.Write("");

this.lblMsg.Text="用户名或密码错误!

";

}

 

==========================================================

2012-11-7日,3,4节讲到此。

==========================================================

在Web应用程序的开发过程中,Web安全是非常重要的,现存的很多网站也都存在一些非常严重的安全漏洞,

其中SQL注入是非常常见的漏洞,

1'or'1'='1

解决方案1,对输入的密码值加密

passwordMD5.aspx

protectedvoidButton1_Click(objectsender,EventArgse)

{

//产生MD5格式的密码,并输出

this.Label_MD5.Text=System.Web.Security.FormsAuthentication.

HashPasswordForStoringInConfigFile(this.TextBox1.Text,"MD5");

}

如加密1为:

C4CA4238A0B923820DCC509A6F75849B

把此密码存入数据库表中。

登录时,同样对输入到password文本框中字符加密,和数据库中的加密值比较,若一样,则通过。

若引入System.Web.Security名称空间,则句子中可省略。

stringupwd=

FormsAuthentication.HashPasswordForStoringInConfigFile(this.txtPassWord.Text,"MD5");

把登录语句中的textbox2.Text换为upwd。

可解决注入漏洞。

 

解决方案2

如果将查询语句进行参数化查询,可以减少SQL注入漏洞的概率,

参数化查询示例代码如下所示。

//使用参数,(注意必须使用SqlCommand,不能用SqlDataAdapter,使用SqlDataAdapter就不能定义参数了)

SqlCommandmyCommand=newSqlCommand("select*fromuser_passwordwhereuser_name='"+this.Login1.UserName.ToString()+"'andpassword=@passwordx",myConn);

myConn.Open();

//添加并定义参数名为:

@passwordx

myCommand.Parameters.Add(newSqlParameter("@passwordx",SqlDbType.VarChar));

//给参数取值

myCommand.Parameters["@passwordx"].Value=@Login1.Password;//注意此处

SqlDataReaderrecu=myCommand.ExecuteReader();

if(recu.Read())//判断密码是否正确

{

//登陆

Session["D_men"]=recu["Depart_men"].ToString();//获得数据库表信息

Response.Redirect("Default2.aspx");//登录到页面

}

else

{

Response.Write("");

}

}

}

回过头,再讲第4章:

(87页)

Repert控件和Datalist控件,GridView控件。

4.2.4Repeater控件

Repeater用于对绑定数据源中的数据进行遍历显示,每条数据一什么格式显示是由Repeater的来决定的,模版会多次显示

姓名:

<%#Eval("Name")%>

年龄:

<%#Eval("Age")%>

<%#Eval("Name")%>表示在这个位置显示当前行Name属性,注意调用Eval、Bind这些数据绑定方法是要用#.

因为Eval就是将属性显示到指定位置,因此也可以显示到文本框中

姓名:

’/>

注意不要写成value=”%#Eval("Name")%>”(双引号),因为<%%>中是C#代码,“是字符,而不是字符串

还可以用在服务器控件中


是换行。

见下面示例:

(说明:

需要先连接department库表。

depart_name,depart_num,picpath为字段名)

要准备几张照片)

1.添加模板

Repeaterid="Repeater1"runat="server">

系部名称:

<%#Eval("depart_name")%>

系部代码:

<%#Eval("depart_num")%>

照片:

'/>

TextBoxID="TextBox1"Text='<%#Eval("depart_name")%>'runat="server">

TextBox>


模板页眉

模板页脚


Repeater>

2、数据库的连接利用类

使用连接类DB.CS来集中连接数据库,连接的代码方法如下:

publicstaticSqlConnectioncreateCon()

{

returnnewSqlConnection("Server=.;DataBase=Northwind;uid=sa;pwd=;");

}

在每个页面中连接数据库时,加入下列代码即可。

SqlConnectionconn=DB.createCon();//对应上面类中的方法

3、设置代码

repeaterControl控件实现分页

privatevoidPage_Load(objectsender,System.EventArgse)

{

if(!

this.IsPostBack)

{

this.Label2.Text="1";

this.data_Repeater();//一般的,无分页的。

//this.databindToRepeater();;//带分页代码的

}

//在此处放置用户代码以初始化页面

}

定义方法(函数):

databindToRepeater()

privatevoiddata_Repeater()//一般的,无分页的。

{

SqlConnectioncon=DB.createCon();

SqlDataAdaptersda=newSqlDataAdapter("select*fromDepartment",con);

DataSetds=newDataSet();

sda.Fill(ds,"emp");

this.Repeater1.DataSource=ds.Tables["emp"].DefaultView;

this.Repeater1.DataBind();

}

privatevoiddatabindToRepeater()//带分页代码的(可不讲)

{

//分页

intcurPage=Convert.ToInt32(this.Label2.Text);//用此法类型转换

SqlConnectioncon=DB.createCon();

SqlDataAdaptersda=newSqlDataAdapter("select*fromexam_database",con);

//sda.SelectCommand=newSqlCommand("select*fromEmployees",con);

DataSetds=newDataSet();

sda.Fill(ds,"emp");

//分页

//System.Web.UI.WebControls.PagedDataSourceps=newPagedDataSource();

System.Web.UI.WebControls.PagedDataSourceps=newPagedDataSource();

ps.DataSource=ds.Tables["emp"].DefaultView;

ps.AllowPaging=true;

ps.PageSize=3;

ps.CurrentPageIndex=curPage-1;

this.Button1.Enabled=true;

this.Button2.Enabled=true;

if(curPage==1)

{

this.Button1.Enabled=false;

}

if(curPage==ps.PageCount)

{

this.Button2.Enabled=false;

}

//this.Repeater1.DataSource=ds.Tables["emp"];

this.Repeater1.DataSource=ps;//改为ps,可分页的。

this.Repeater1.DataBind();

}

“上一页”命令按钮

privatevoidButton1_Click(objectsender,System.EventArgse)

{

this.Label2.Text=Convert.ToString(Convert.ToInt32(this.Label2.Text)-1);

this.databindToRepeater();

}

“下一页”命令按钮

privatevoidButton2_Click(objectsender,System.EventArgse)

{

this.Label2.Text=Convert.ToString(Convert.ToInt32(this.Label2.Text)+1);

this.databindToRepeater();

}

}

2、GridView控件

(1)使用传统的ADO.NET和GridView来做一些基本的操作。

实现分页、编辑、删除、排序、选中行、下拉列表框等基本操作。

//连接数据库使用上面讲过的类来连接

SqlConnectioncon=DB.createCon();

protectedvoidPage_Load(objectsender,EventArgse)

{

if(!

Page.IsPostBack)

{

//在此处放置用户代码以初始化页面

BindGrid();//绑定子程序

}

}

//绑定子程序

protectedvoidBindGrid()

{

SqlDataAdapterdataAdapter2=newSqlDataAdapter("select*fromcourse",myConn);

DataSetsetS=newDataSet();

dataAdapter2.Fill(setS,"AAA");

this.GridView1.DataSource=setS.Tables["AAA"];

this.GridView1.DataBind();//数据绑定

}

//实现分页,注意事件的选用

protectedvoidGridView1_PageIndexChanging(objectsender,GridViewPageEventArgse)

{

//分页

this.GridView1.PageIndex=e.NewPageIndex;

BindGrid();//数据绑定

}

 

==================================================================

2012-11-14日,3,4节讲到此。

当时是把数据源控件对照着讲的,讲的网站是StorWeb。

实现删除仅开了个头。

==================================================================

//实现删除,

protectedvoidGridView1_RowDeleting(objectsender,GridViewDeleteEventArgse)

{

//删除,注意有一隐藏列:

ID

//stringkc_id=GridView1.Rows[e.RowIndex].Cells[0].Text.ToString().Trim();

//stringsqlstr="deletefromcoursewhereCourse_id='"+kc_id+"'";

stringsqlstr="deletefromcoursewhereCourse_id='"+GridView1.DataKeys[e.RowIndex].Value.ToString()+"'";

SqlCommandcmd=newSqlCommand(sqlstr,myConn);

myConn.Open();

cmd.ExecuteNonQuery();

myConn.Close();

BindGrid();//数据绑定

}

可为删除加提示:

确实要删除吗?

先要把此字段转换为TemplateField(模版列)然后编辑模版列,显示删除命令按钮的属性,在OnClientClick中写入:

returnconfirm("确实要删除吗?

")的提示。

这是再点击“删除”时,可出现提示。

//实现编辑和更新,可选择对应列编辑

protectedvoidGridView1_RowEditing(objectsender,GridViewEditEventArgse)

{

//编辑

this.GridView1.EditIndex=e.NewEditIndex;

BindGrid();

}

protectedvoidGridView1_RowUpdating(objectsender,GridViewUpdateEventArgse)

{

//更新,注意到若在page_load事件中无:

if(!

Page.IsPostBack),则是不能更新的。

stringempID=this.GridView1.DataKeys[e.RowIndex].Value.ToString();

stringkc_name=((Text

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 幼儿教育 > 幼儿读物

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1