版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 湖北省武汉市2025-2026学年八年级上学期期中模拟测试英语试卷(含答案)
- 广西来宾市部分校2025-2026学年高二下学期7月期末考试语文试卷(含答案)
- 八年级数学上册人教版 第十五章《 轴对称》单元自测卷(含答案)
- 2026-2027学年四川省资阳市某中学九年级(上)入学测试物理试卷(含答案)
- 2025-2026年四川省部编版高中体育健康标准测试题
- 2026年浙江省部编版五年级语文上册第7单元课后练习题
- 2025-2026年心理测评与心理辅导试卷
- 2026年生化检验室内质控要点考点试卷及答案
- 《人工智能 电力大模型系统技术要求》GBZ 233-2026
- 2026年心脏外科术后复查诊断考核试卷及答案
- 七年级历史第四单元《三国两晋南北朝:政权分立与民族交融》单元整合复习思维型导学案
- 谐音梗挑战课件
- 公共建筑设计产品安全使用说明书(试行)
- 2026年山东春考《车辆维修类专业知识》模拟试题及答案解析
- 2026年出租车公司三级安全教育培训考核试题
- 酒店前台礼貌礼仪培训
- 中国银行培训员工制度
- 2026年机械工程师校招专业面试题库含答案
- 心内科实习生入科宣教
- 2025届天域全国名校协作体浙江省10月联考高三英语答案
- 生物跨学科教学设计课件
评论
0/150
提交评论