1、web应用技术,数据库配置,确保SQL Server 身份验证能连接数据库,1、先用Windows 身份验证连接数据库,2、 的右键菜单中选择属性,在安全性菜单中选择验证模式后确定,选择!,3、 sa用户的密码设为 sa,sa属性窗口用户名和密码均为 sa,4、sa属性窗口中的状态设置,选择!,5、上述均确定后,退出SQL Server6、重新启动两个服务(管理工具中),7、再启动SQL Server 身份验证连接数据库, 附加数据库:BookCodeDB,配置和连接数据库的基本过程1 配置SQL Server2 在web.Config文件中配置连接字符串3 创建连接对象实例;打开数据库4 书
2、写SQL语句5 创建命令对象;执行SQL语句6 读取记录信息操作数据库,ADO.NET是.NET应用程序的数据访问模型, 用于访问关系型数据库系统,是.NET应用程序中用于处理数据库数据的首选技术. 微软公司的ADO (ActiveX Data Objects) 一个用于存取数据源的组件。它提供了编程语言和统一数据访问方式的一个中间层。允许开发人员编写访问数据的代码而不用关心数据库是如何实现的,而只用关心到数据库的连接。 ActiveX是实现对象连接与嵌入的标准接口如浏览器ActiveX控件。,ADO.NET技术,ADO.NET 5大对象,创建对象实例语法:OleDbConnection co
3、nn = new OleDbConnection(connStr);SqlConnection conn = new SqlConnection(connStr);,ADO.NET操作数据库的基本原理,组成ADO.NET的各个类被包含在System.DataSystem.Data.SqlClientSystem.Data.OleDb三个名称空间中。,用来连接不同的数据库 数据库的连接方式 通用: OleDBConnection( SQL SERVER , ACCESS ) 专用: SqlConnection (SQL SERVER),使用Connection对象,5大对象的前缀, 数据库连接串
4、 OleDbConnection: string connStr = Provider=SQLOLEDB; Data Source=.; Initial Catalog=BookCodeDB; uid=sa;pwd=sa; OleDbConnection conn = new OleDbConnection(connStr); conn.Open(); SqlConnection string connStr = Server= . ; database= BookCodeDB; uid=sa; pwd=sa; SqlConnection conn =new SqlConnection(con
5、nStr); conn.Open();,数据库连接串(信任连接)SSPI是Security Support Provider Interface(Microsoft安全支持提供器接口)的英文缩写。SSPI是定义得较全面的公用API,用来获得验证、信息完整性、信息隐私等集成安全服务,以及用于所有分布式应用程序协议的安全方面的服务。,连接串放在 web.config 文件中: 程序中读取连接串:string connStr = System.Configuration.ConfigurationManager.ConnectionStrings OleDbConnSQLServer .Connec
6、tionString.ToString();,使用 Command 对象和 DataReader 对象 使用该对象向数据源发送各种SQL查询 之类的命令,实现对数据库的操作.string SQLStr = delete from users where uid= aa ;OleDbCommand cmd= new OleDbCommand(SQLStr,conn);cmd.ExecuteNonQuery();,Command 的几个执行方法: cmd.ExecuteNonQuery(); 无返回执行结果,如插入.删除.更新等SQL语句 cmd.ExecuteReader(); 返回 DataR
7、eader 对象,向前只读数据流 cmd.ExecuteScalar(); 返回单个值,如使用聚合函数如: string SQLStr = select avg(core) from train OleDbCommand cmd= new OleDbCommand(SQLStr,conn); Double pjf =(Double ) cmd.ExecuteScalar();,使用 DataReader 对象读取数据 向前只读数据,每次只读取一条记录 用法: string strSQL = select * from student where 学号= 10100026 ; OleDbComm
8、and cmd= new OleDbCommand(strSQL,conn); OleDbDataReader dr=cmd.ExecuteReader(); dr.Read(); /如直接读取某一字段的值 TextBox1.Text=dr姓名.ToString(); TextBox2.Text=dr性别.ToString();,用户登陆的例子:用户名和密码保存在BookCodeDB数据库的Admin表中,均为 sys要求输入错误是提示用户不存在;输入正确,提示登陆成功,并导向一个新页面,在新页面提示出用户名。,数据库的配置用户名和密码均为 sa,连接串放在 web.config 文件中: ,
9、代码:点击登录按钮 string strUser = TextBox1.Text.Trim(); string strPwd = TextBox2.Text.Trim(); if (strUser = | strPwd = ) Page.RegisterStartupScript(alert, alert(请检查您的输入!);); return; ,/连接并打开数据库string connStr = System.Configuration.ConfigurationManager. ConnectionStringsOleDbConnSQLServer.ConnectionString.To
10、String();OleDbConnection conn = new OleDbConnection(connStr); conn.Open();,/主要参考代码:string SQLStr = SELECT * FROM Admin Where UserName= + strUser + and Password = + strPwd + ;OleDbCommand cmd = new OleDbCommand(SQLStr, conn);OleDbDataReader dr = cmd.ExecuteReader();if (dr.Read() /dr.Read() 返回一个bool 值
11、;如果dr读到了信息返回True SessionUserName = strUser; ClientScript.RegisterStartupScript(ClientScript.GetType(), alert, alert(登录成功!);location.href= admin.aspx ; ); /Response.Redirect(admin.aspx); else SessionUserName = null; ClientScript.RegisterStartupScript(ClientScript.GetType(), alert, alert(用户不 存在!);); ,
12、上机作业4:用户登录连接数据库,数据库:BookCodeDB表:users;Admin共3个页面(注意下一页ppt要求),全部用语言描述下述代码(描述文字放在管理员界面): string strUser = TextBox1.Text.Trim(); string strPwd = TextBox2.Text.Trim(); string connStr = System.Configuration.ConfigurationManager.ConnectionStringsOleDbConnSQLServer.ConnectionString.ToString(); OleDbConnect
13、ion conn = new OleDbConnection(connStr); conn.Open(); string SQLStr = SELECT * FROM Admin Where UserName= + strUser + and Password = + strPwd + ; OleDbCommand cmd = new OleDbCommand(SQLStr, conn); OleDbDataReader dr = cmd.ExecuteReader(); if (dr.Read() ClientScript.RegisterStartupScript(ClientScript
14、.GetType(), alert, alert(登录成功!); ); else ClientScript.RegisterStartupScript(ClientScript.GetType(), alert, alert(用户不存在!);); ,考核项目5: Command操作数据库,数据库: BookCodeDB表:train,使用面板控件,一 在GridView中显示数据,1 添加GridView 控件,2 使用自动套用格式,3 GridView表格的重要属性表格宽度:Width=600px 高不设置 表格中字的大小和字体:Font-Size=Small表格的行高:RowStyle中的
15、 Height=30px设置自动分页:AllowPaging=True PageSize=3设置不自动产生列: AutoGenerateColumns=False,4 智能标记中选编辑列,可定制显示那些字段,5 绑定列的设置需要显示数据库表中的几个字段,则添加几个BoundField,设置每个BoundField与数据表中相关联的字段名。如第一个BoundField与数据表中的字段id关联则设置:DataField=id HeaderText=编号 以此类推设置。HeaderText是指表头显示的文本,设置表格的列宽: ItemStyle Width=80px,6 数据绑定代码(函数)priv
16、ate void GridView1_content() string SQLStr = select * from train; string connStr = System.Configuration.ConfigurationManager.ConnectionStringsOleDbConnSQLServer.ConnectionString.ToString(); OleDbConnection conn = new OleDbConnection(connStr); conn.Open(); OleDbDataAdapter da = new OleDbDataAdapter(S
17、QLStr, conn); DataSet ds = new DataSet(); da.Fill(ds, datatable); GridView1.DataSource = ds.Tablesdatatable.DefaultView; GridView1.DataBind(); ,7 Page_Load数据代码if(!IsPostBack) GridView1_content();,8 分页数据代码(页索引改变事件)protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e) Grid
18、View1.PageIndex = e.NewPageIndex; GridView1_content();,关于事件中的两个参数:Page_Load(object sender, EventArgs e)Button1_Click(object sender, EventArgs e)DropDownList1_SelectedIndexChanged(object sender, EventArgs e)GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e)第一个参数object用来传递事件的发生者( send
19、er ),第二个参数EventArgs用来传递事件的细节(e事件对象实例),二 DropDownList数据绑定 函数名:DropDownList1_content()string SQLStr = select id,姓名 from train;OleDbDataAdapter da = new OleDbDataAdapter(SQLStr,conn);DataSet ds = new DataSet();da.Fill(ds,datatable);DropDownList1.DataSource = ds.Tablesdatatable.DefaultView;DropDownList1
20、.DataTextField = 姓名; DropDownList1.DataValueField=id;DropDownList1.DataBind();,三 SQL语句参考: 数据库课程:select * from train where 姓名 = 李良 delete from train where id= 200string SQLStr = select * from train where id=+vid;string SQLStr = delete from train where id=+vid;string SQLStr = update train set 姓名=+Text
21、Box1.Text+, 性别=+TextBox2.Text+, 职务=+TextBox3.Text+, where id=+vid;string SQLStr = insert into train(姓名,性别,职务,公司,联系) values(+xm+,+xb+,+zw+,+gs+,+lx+); /注意数值型不加 执行SQL语句:string SQLStr = delete from train where id=+vid;OleDbCommand cmd= new OleDbCommand(SQLStr,conn);cmd.ExecuteNonQuery();,考核项目5写代码步骤,1 G
22、ridView和DropDownList数据绑定;分别写绑定函数,先在Page_Load中调用2 加新按钮:面板显示,清空各文本框3 加新保存按钮:取出各文本框的值存到变量中,书写插入的SQL语句保存在变量中,读数据库连接字符串,创建连接对象打开数据库,创建命令对象执行SQL语句,调用两个绑定函数,面板隐藏。4 更新按钮:面板显示,取出DropDownList中准备更新记录的id,书写查询该记录的SQL语句保存在变量中,读数据库连接字符串,创建连接对象打开数据库,创建命令对象,创建dr对象OleDbDataReader dr = cmd.ExecuteReader();dr.Read() 将字
23、段值显示在文本框中 如 TextBox1.Text=dr姓名.ToString();5 更新保存按钮:取出各文本框的值存到变量中,书写更新的SQL语句保存在变量中,同3。6 删除按钮:,操作数据库基本流程:1 配置数据库2 读取连接串3 连接并打开数据库4 书写SQL语句 cmd执行SQL语句5 cmd返回dr对象 da填充数据集,执行数据绑定,/读取连接串string connStr = System.Configuration.ConfigurationManager.ConnectionStringsOleDbConnSQLServer.ConnectionString.ToString
24、();/打开连接OleDbConnection conn = new OleDbConnection(connStr);conn.Open();/书写SQL语句string SQLStr = select * from student where 学号=10100026;/读取字段值OleDbCommand cmd = new OleDbCommand(SQLStr, conn);OleDbDataReader dr = cmd.ExecuteReader();if(dr.Read() /TextBox1.Text=dr姓名.ToString(); /TextBox2.Text=dr性别.To
25、String();,/执行SQL语句string SQLStr = delete from users where uid=aa;OleDbCommand cmd= new OleDbCommand(SQLStr,conn);cmd.ExecuteNonQuery();/填充数据集OleDbDataAdapter da = new OleDbDataAdapter(SQLStr,conn);DataSet ds = new DataSet();da.Fill(ds,datatable);/GridView数据绑定GridView1.DataSource = ds.Tablesdatatable
26、.DefaultView;GridView1.DataBind();/DropDownList数据绑定DropDownList1.DataSource = ds.Tablesdatatable.DefaultView;DropDownList1.DataTextField = 姓名; DropDownList1.DataValueField=id;DropDownList1.DataBind();,考核项目6: DataSet操作数据库,DataSet 操作数据库原理:,DataSet DataTable DataRow,数据库,数据表,记录,DataAdapter,CommandBuilde
27、r,(物理数据库),(内存数据库),(Select),(Insert Update Delete),CommandBuilder必须和DataAdaper一同使用。注意以下两个条件:1、 DataAdaper的SelectCommand属性必须被设置;2、 SelectCommand属性返回的字段中必须包含主键字段或具有唯一性约束的字段。,建立数据集string connStr = System.Configuration.ConfigurationManager.ConnectionStringsOleDbConnSQLServer.ConnectionString.ToString();O
28、leDbConnection conn = new OleDbConnection(connStr);conn.Open();string SQLStr = select * from train;OleDbDataAdapter da = new OleDbDataAdapter(SQLStr, conn);DataSet ds = new DataSet();da.Fill(ds, datatable);,DataSet对象操作数据库,加新记录保存(记录操作一定要使用CommandBuilder)string SQLStr = select * from train;OleDbDataAd
29、apter da = new OleDbDataAdapter(SQLStr,conn);OleDbCommandBuilder cmd= new OleDbCommandBuilder(da);DataSet ds = new DataSet();conn.Open();da.Fill(ds,datatable);DataTable dt=ds.Tablesdatatable;DataRow row=dt.NewRow();row姓名=TextBox1.Text;row性别=TextBox2.Text; dt.Rows.Add(row);da.Update(ds,datatable);,更新
30、记录:将数据读到文本框 string SQLStr = select * from train where id=+vid;OleDbDataAdapter da = new OleDbDataAdapter(SQLStr,conn);DataSet ds = new DataSet();conn.Open();da.Fill(ds,datatable);DataTable dt=ds.Tablesdatatable;DataRow row=dt.Rows0;TextBox1.Text=row姓名.ToString();TextBox2.Text=row性别.ToString(); ,更新记录
31、保存: (记录操作一定要使用CommandBuilder) string SQLStr = select * from train where id=+vid;OleDbDataAdapter da = new OleDbDataAdapter(SQLStr,conn);OleDbCommandBuilder cmd= new OleDbCommandBuilder(da); /must!DataSet ds = new DataSet();conn.Open();da.Fill(ds,datatable);DataTable dt=ds.Tablesdatatable;DataRow row
32、=dt.Rows0;row姓名=TextBox1.Text;row性别=TextBox2.Text;row职务=TextBox3.Text;row公司=TextBox4.Text;row联系=TextBox5.Text; da.Update(ds,datatable);,删除记录: (记录操作一定要使用CommandBuilder) string SQLStr = select * from train where id=+vid;OleDbDataAdapter da = new OleDbDataAdapter(SQLStr,conn);OleDbCommandBuilder cmd= n
33、ew OleDbCommandBuilder(da); /must!DataSet ds = new DataSet();conn.Open();da.Fill(ds,datatable);DataTable dt=ds.Tablesdatatable;DataRow row=dt.Rows0;row.Delete();da.Update(ds,datatable);,数据库操作(DataSet) 要求:1 数据库连接串放在Web.config文件中2 按考核项目5界面设计完成每一项功能3 上传的Web.config中的连接串为:,考核项目7: Gridview应用,考核项目7相关技术:, G
34、ridView 中的模版字段,超链接字段和手动分页,考核项目7相关技术:,模版列 在模版列 中放置图片,考核项目7相关技术:,模版列代码: ,考核项目7相关技术:,添加超链接字段,考核项目7相关技术:,超链接字段代码:,考核项目7相关技术:,3 在新页面view.aspx中获取vid学号值,显示信息:string vid=Requestvid;string strConn = System.Configuration.ConfigurationManager.ConnectionStringsOleDbConnSQLServer.ConnectionString.ToString();OleD
35、bConnection conn = new OleDbConnection(strConn);conn.Open();DataSet ds = new DataSet();string strSQL=Select * from jsjxs where xh=+vid+;OleDbDataAdapter da = new OleDbDataAdapter(strSQL, conn);da.Fill(ds, datatable);DataTable dt=ds.Tablesdatatable;DataRow row=dt.Rows0;Label1.Text=学号:+rowxh+姓名:+rowxm
36、+性别:+rowxb+出生年月:+rowcsrq+班级:+rowbj;,考核项目7相关技术:,4 超链接CSS: a:link color:#000000;text-decoration:none; a:visited color:#000000;text-decoration:none; a:hover color:#ff3300;text-decoration:underline; a:active color:#ff3300;text-decoration:underline; ,考核项目7相关技术:,5 手动分页:四个连接按钮设计界面代码:,考核项目7相关技术:,两个显示页数标签:,考
37、核项目7相关技术:,6 显示页数的函数:private void ShowStats()lblCurrentIndex.Text = 第 + (MyGridView.PageIndex + 1).ToString() + 页;lblPageCount.Text = 总共 + MyGridView.PageCount.ToString() + 页;,考核项目7相关技术:,7 绑定GridView的函数:public void BindGrid()string strConn = System.Configuration.ConfigurationManager.ConnectionStrings
38、OleDbConnSQLServer.ConnectionString.ToString();OleDbConnection conn = new OleDbConnection(strConn);conn.Open();string strSQL=Select * from jsjxs;OleDbDataAdapter da = new OleDbDataAdapter(strSQL,conn);DataSet ds = new DataSet();da.Fill(ds, datatable);MyGridView.DataSource = ds.Tablesdatatable.Defaul
39、tView;MyGridView.DataBind();ShowStats();/调用显示页数的函数,考核项目7相关技术:,8 Page_Load事件:if(!IsPostBack)btnFirst.Text = 首页;btnPrev.Text = 前一页;btnNext.Text = 下一页;btnLast.Text = 末页;BindGrid();,9 连接按钮被点击的函数:PagerButtonClickpublic void PagerButtonClick(object sender, EventArgs e)string arg = (LinkButton)sender).Comm
40、andArgument.ToString();switch(arg) case next:if (MyGridView.PageIndex 0) /首页索引等于0MyGridView.PageIndex -= 1;break; case last:MyGridView.PageIndex = (MyGridView.PageCount - 1); /相等break; default:MyGridView.PageIndex =0; / System.Convert.ToInt32(arg)break;BindGrid();ShowStats();,考核项目7相关技术:,10 页索引改变事件:p
41、rotected void MyGridView_PageIndexChanging(object sender, GridViewPageEventArgs e) MyGridView.PageIndex = e.NewPageIndex; BindGrid(); ShowStats(); ,11 添加编辑和删除按钮,12 添加编辑和删除按钮事件,13 事件代码:编辑按钮:MyGridView.EditIndex = (int)e.NewEditIndex;BindGrid();取消按钮:MyGridView.EditIndex = -1;BindGrid();,删除按钮(GridView属
42、性设置DataKeyNames= xh ) : string vxh = MyGridView.DataKeyse.RowIndex.Value.ToString(); string strSQL = delete from jsjxs where xh= + vxh + ; if (MyGridView.Rows.Count) % (MyGridView.PageSize) = 1)/判断最后一页是否只有一条记录 MyGridView.PageIndex = MyGridView.PageIndex - 1; BindGrid(); ,更新按钮(GridView属性设置DataKeyName
43、s= xh )string vxh = MyGridView.DataKeyse.RowIndex.Value.ToString();string vxm =(TextBox)(MyGridView.Rowse.RowIndex.Cells3.Controls0).Text.Trim();string vxb = (TextBox)(MyGridView.Rowse.RowIndex.Cells4.Controls0).Text.Trim();string vbj = (TextBox)(MyGridView.Rowse.RowIndex.Cells5.Controls0).Text.Trim();string strSQL = Update jsjxs set xm= + vxm + ,xb= + vxb + ,bj= + vbj + where xh= + vxh + ; MyGridView.EditIndex = -1; BindGrid();,