实验6: SqlDataReader实验
一、实验名称和性质
所属课程 | C#数据库系统设计 |
实验名称 | SqlDataReader实验 |
实验学时 | 4 |
实验性质 | ✓□验证 □综合 ✓□设计 |
必做/选做 | ✓□必做 □选做 |
二、实验目的
1. 掌握SqlCommand的对存储过程的调用方法。
2. 掌握SqlDataReader的常用方法。
三、实验的软硬件环境要求
硬件环境要求:
PC机(单机)
使用的软件名称、版本号以及模块:
Windows XP下的SQL Server 2005(或 SQL Server 2008)
四、知识准备
1.SqlCommand对象允许你指定在数据库上执行的操作的类型。比如,你能够对数据库中的行数据执行select,insert,modify以及delete命令。
SqlCommand的常用属性
属性 | 说明 |
CommandType | 解释CommandText的属性,值可以是Text、StoredProcedure、TableDirect 。默认值为Text。 |
CommandText | CommandType设置为StoredProcedure时,CommandText存放的就是所以执行的存储过程的名称,为TEXT时是T-SQL语句 |
Connection | Connection属性包含SqlCommand用于与数据库通信的SqlConnection对象。 |
CommandTimeout | CommandTimeout指定了Command等待查询结果第一行数据到达的超时时间(单位为秒) , 默认值为30。如果在CommandTimeout时间内仍未完成查询,则Command将引发异常。 |
SqlCommand的常用方法
2.创建SqlCommand对象的方法
(1)直接创建一个新实例,然后设置适当属性:
– SqlCommand cmd = new SqlCommand();
– cmd.Connection = conn;
– cmd.CommandText = strSQL;
(2) 利用构造函数指定查询字符串和SqlConnection连接:
– SqlCommand cmd = new SqlCommand(strSQL,conn);
(3) 调用Sqlconnection类的CreateCommand方法:
– SqlCommand cmd = conn.CreateCommand();
– cmd.CommandText = strSQL;
3. SqlCommand的ParaMeters属性:Transact-SQL语句或存储过程的参数。默认值为空集合。当SQL语句中出现未知的情况时可以使用参数来做。要在SQL语句中的可变参数前加@以区分是可变参数。
SqlCommand的ParaMeters中增加参数的方法:
cmd.Parameters.Add("@ly_title",SqlDbType.NVarChar,20);
//增加@ly_title参数,类型为NVarChar
cmd.Parameters["@ly_title"].Value = "title"; //给参数@ly_title赋值
4. 存储过程的调用
SqlCommand的CommandType属性值StoredProcedure时,CommandText的属性值应该设置为存储过程的名字。
5. SqlDataReader形成的是数据流,并且数据流是以只进且只读的形式。我们可以形容它向一股瀑布一样,只往前进。
若要创建 SqlDataReader,必须调用SqlCommand 对象的 ExecuteReader 方法,而不直接使用构造函数。
• SqlDataReader sdr=cmd.ExecuteReader();
6. SqlDataReader对象中内容的显示
SqlDataReader sdr = cmd.ExecuteReader();
while (sdr.Read())
{
Console.Write(sdr[0].ToString());
Console.Write(sdr[1].ToString());
Console.Write(sdr[2].ToString());
}
7. SqlDataReader对象中多个数据集合的处理
do {
while (sda.Read())
{ txtResult.Text += sda[0] + "," + sda[1] + "\r\n"; }
} while (sda.NextResult());
8. 当SqlDataReader打开时,可以使用GetSchemaTable()方法来获取结果集的架构信息(返回表的结构信息)。
u DataTable dt = sda.GetSchemaTable();
u dataGridView1.DataSource = dt;
五、实验内容
1.有如下的T-SQL语句,用SqlCommand对象将1个数据集读入SqlDataReader对象。在dataGrid上将SqlDataReader中的数据集中数据显示出来。
String sqlStr=”select * from s”:
2.下面是1个存储过程,分别用SqlCommand对象进行调用并将结果显示在界面上。编程完成:在界面中输入学号,调用如下存储过程并将结果显示在界面上。
create proc Proc_ParaSelect
@sno varchar(10)
as
select s.SNO,sname,c.cno,cname,grade from S,C,sc
where s.SNO=sc.sno and c.CNO=sc.cno and s.SNO=@sno
order by sno
exec Proc_ParaSelect '200512'
3. 编写存储过程proc_CourseNum:在界面上输入课程名,查询选课学生信息,并将选课人数返回。(要求:返回的选课人数要用output带出)。并在界面中输入课程名,在调用存储过程proc_CourseNum在界面上显示选课学生信息,同时显示选课人数。
4. 拓展题:
界面如下:
窗体的Load()事件中将系部信息加入trvStudent(树视图)中,并将学生姓名加入到各系部节点下。双击学生姓名节点,在右边的文本框中显示学生的详细信息。
(提示:在加入学生节点时,为方便在数据表中查找,将学生的姓名作为节点的Text属性,而将学生的学号作为Tag属性。 )
六、实验报告
针对每个实验写出操作步骤和结果,编写程序时要注意容错处理。