




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 市政工程中的环境保护措施
- 人工智能语音技术在自动驾驶汽车中的应用
- 生产部岗位职责与质量控制标准
- 小学语文部编版五年级下册复习时间表
- 高二英语备课组教案设计方案
- 仓储物流设施保修措施
- 中国传统文化对国际关系的启示
- 企业电子商务平台的建设与运营
- 化工厂洗胃机安全操作流程
- 企业内部劳动市场分析与应用
- 外文文献原稿和译文COST MANAGEMENT AND PRODUCTION CONTROL FOR CONSTRUCTION COMPANIES
- 全国铁路工程工程量清单计价
- 农产品中常见重金属的危害
- 中国商帮江右商帮内容提要
- 养老护理员职业技能等级认定三级(高级工)理论知识考核试卷
- 上海交大科技成果转移转化实践简版
- 简单的设计合同(3篇)2023年
- 《阿Q正传》《边城》比较阅读课件28张 统编版高中语文选择性必修下册
- 2023年小学语文教师学科专业知识考试试题及答案
- GB/T 24186-2022工程机械用高强度耐磨钢板和钢带
- GB/T 7702.5-1997煤质颗粒活性炭试验方法水容量的测定
评论
0/150
提交评论