第十四讲 数据集对象DataRader_第1页
第十四讲 数据集对象DataRader_第2页
第十四讲 数据集对象DataRader_第3页
第十四讲 数据集对象DataRader_第4页
第十四讲 数据集对象DataRader_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第十四讲 SqlDataReader对象一、SqlDataReader对象SqlDataReader对象是对连接执行 Transact-SQL 语句返回的一个只读的数据流。常用属性:1)Item 索引器属性,以原始格式获得一列的值SqlDataReader对象名.索引值SqlDataReader对象名.“表中的字段名”2)FieldCount 获取当前行的列数3)HasRows 获取一个值,以表示SqlDataReader对象中是否包含一行或多行记录。二、常用方法:1)Read 使DataReader对象前进到下一条记录(如果有)2)Close 关闭DataReader对象。注意,关闭阅读器对

2、象并不会自动关闭底层连接例:在学生成绩数据库中新建一个成绩表,输入期若干个学生的学号及语文、数学、英语三门课的成绩,创建一个视图,可输出所有学生的成绩及总分和平均分,并按总分的降序排列。设计一个应用程序,可查看全班所有学生的总分及平均分。创建视图的SQL代码参考如下:CREATE VIEW dbo.成绩排名AS SELECT TOP 100 PERCENT 学号, 语文, 数学, 英语, 语文 + 数学 + 英语 AS 总分, (语文 + 数学 + 英语) / 3 AS 平均分 FROM dbo.成绩表 ORDER BY 总分 DESC程序代码参考如下: string SqlStr = &qu

3、ot;Server=192.168.200.61;User Id=sa;Pwd=;DataBase=stu" SqlConnection con = new SqlConnection(SqlStr); con.Open(); SqlStr = "select * from view1 " SqlCommand cmd = new SqlCommand(SqlStr, con); SqlDataReader dr = cmd.ExecuteReader(); string s = "学号 语文 数学 外语 总分 平均分n" while (dr.

4、Read() int i = 0; while (i < dr.fieldcount) s = s + " " + dri.ToString(); i+; s = s + "n" MessageBox.Show(s); con.Close(); con.Dispose();实作练习:在航班信息管理数据库中建立一个用户表 (用户名,密码,用户类型),输入若干条记录,编程查看并输出用户表中的所有记录。 string constr = "Data Source=0F6A988FB791401;Initial Catalog=航班信息管理;Int

5、egrated Security=True" SqlConnection con = new SqlConnection(constr); con.Open(); string comstr = "select * from 用户表" SqlCommand com = new SqlCommand(comstr, con); SqlDataReader dr = com.ExecuteReader(); string str = "" ; while (dr.Read() for (int i = 0; i < dr.FieldCount

6、 - 1; i+) str = str + dri.ToString() + " " str = str + "n" MessageBox.Show(str); con.Close();三、案例:用户登录界面设计及实现:需要引用的命名空间为:using System.Data.SqlClient;登录界面代码: string str = "Server=(local);User Id=sa;Pwd=;DataBase=航班信息管理" SqlConnection con = new SqlConnection(str); con.Ope

7、n(); str = "select * from 用户表 where 用户名='" + textBox1.Text + "'" SqlCommand com = new SqlCommand(str, con); com.Connection = con; SqlDataReader dr = com.ExecuteReader(); if(dr.HasRows) dr.Read(); string s = dr1.ToString(); if (s.Trim()=textBox2.Text) Form1 f1 = new Form1(

8、); f1.Show(); else MessageBox.Show("密码错误!"); else MessageBox.Show("用户名不存在!"); 四、实作练习:编程实现航班信息管理的用户注册功能。参考代码如下: string constr = "Data Source=0F6A988FB791401;Initial Catalog=航班信息管理;Integrated Security=True" SqlConnection con = new SqlConnection(constr); con.Open(); string

9、 comstr = "select * from 用户表 where 用户名='" + textBox1.Text + "'" SqlCommand com = new SqlCommand(comstr, con); SqlDataReader dr = com.ExecuteReader(); if (dr.HasRows) MessageBox.Show("用户名已存在,重新注册!"); else con.Close(); con.Open(); comstr = "insert into 用户表 (用

10、户名,密码,用户类型) values('" + textBox1.Text + "','" + textBox2.Text + "','学生')" com = new SqlCommand(comstr, con); if (com.ExecuteNonQuery() = 1) MessageBox.Show("注册成功!"); else MessageBox.Show("数据库写入失败!"); con.Close();五、向组合框中添加数据库中的信息 st

11、ring str = "Server=(local);User Id=sa;Pwd=;DataBase=航班信息管理" SqlConnection con = new SqlConnection(str); con.Open(); SqlCommand cmd = new SqlCommand("select 航班号 from 航班信息表"); cmd.Connection = con; SqlDataReader dr = cmd.ExecuteReader(); while (dr.Read() comboBox3.Items.Add(dr0); c

12、omboBox3.Text = comboBox3.Items0.ToString();con.Close();向下拉列表框图中添加数据集 string constr = "Data Source=417-80;Initial Catalog=student;Integrated Security=True" SqlConnection con = new SqlConnection(constr); con.Open(); string sqlstr = "select userType from userType" SqlCommand com =

13、new SqlCommand(sqlstr, con); SqlDataReader dr = com.ExecuteReader(); while (dr.Read() cmbUserTpe.Items.Add (dr0.ToString (); con.Close(); cmbUserTpe.SelectedIndex = 0;定义用户类型类 public class UserTypeClass int userTypeID; string userType; public int UserTypeID get return userTypeID; public string UserTy

14、pe get return userType; public UserTypeClass(int id,string type) userTypeID = id; userType = type; 将用户类型对象添加到下拉列表框中 string constr = "Data Source=417-80;Initial Catalog=student;Integrated Security=True" SqlConnection con = new SqlConnection(constr); con.Open(); string sqlstr = "select

15、* from userType" SqlCommand com = new SqlCommand(sqlstr, con); SqlDataReader dr = com.ExecuteReader(); while (dr.Read() UserTypeClass x = new UserTypeClass(Convert .ToInt16 ( dr0),dr.GetString(1); cmbUserTpe.Items.Add (x); con.Close(); cmbUserTpe.SelectedIndex = 0; cmbUserTpe.DisplayMember = &q

16、uot;UserType"完成用户注册 string constr = "Data Source=417-80;Initial Catalog=student;Integrated Security=True" SqlConnection con = new SqlConnection(constr); con.Open(); string sqlstr = "insert into usertabel(username,userpwd,usertypeid) values('0','1',2)" UserTyp

17、eClass x=cmbUserTpe.SelectedItem as UserTypeClass ; sqlstr = string.Format(sqlstr, txtUsername.Text, txtUserPWD.Text, x.UserTypeID); SqlCommand com = new SqlCommand(sqlstr, con); if (com.ExecuteNonQuery() > 0) MessageBox.Show("用户注册成功!"); con.Close();用户注册功能的完善(二次输入密码是否一致,用户名是否已注册) if (tx

18、tUserPWD.Text != txtUserPWD2.Text) MessageBox.Show("二次输入的密码不一致!"); else string constr = "Data Source=417-80;Initial Catalog=student;Integrated Security=True" SqlConnection con = new SqlConnection(constr); con.Open(); string sqlstr = "select * from usertabel where username=&#

19、39;" + txtUsername.Text + "'" SqlCommand com = new SqlCommand(sqlstr, con); if (com.ExecuteScalar() !=null) MessageBox.Show("用户名已注册!"); else sqlstr = "insert into usertabel(username,userpwd,usertypeid) values('0','1',2)" UserTypeClass x = cmbUse

20、rTpe.SelectedItem as UserTypeClass; sqlstr = string.Format(sqlstr, txtUsername.Text, txtUserPWD.Text, x.UserTypeID); com = new SqlCommand(sqlstr, con); if (com.ExecuteNonQuery() > 0) MessageBox.Show("用户注册成功!"); con.Close(); 用户登录功能的实现与SQL注入式攻击的防范: string constr = "Data Source=417-80

21、;Initial Catalog=student;Integrated Security=True" SqlConnection con = new SqlConnection(constr); con.Open(); string sqlstr = "select * from usertabel where username='0' and userpwd='1'" sqlstr =string .Format (sqlstr,txtUsername.Text ,txtUserPWD.Text ); SqlCommand com

22、 = new SqlCommand(sqlstr, con); if (com.ExecuteScalar() != null) MessageBox.Show("登录成功!"); this.Close(); else MessageBox.Show("登录失败!"); con.Close();SQL注入式攻击若用户输入的用户名为abc,密码为' or '1'='1 则sqlstr =string .Format (sqlstr,txtUsername.Text ,txtUserPWD.Text );命令生成的sqlstr为:s

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论