xpath返回结果是否有值_【自学C#】|| 笔记 41 DataReader:读取查询结果

6e8e6541d7463b51745e29821509e8af.png

一、DataReader:读取查询结果    

    1.DataReader 类概述

    DataReader 类在 System.Data.SqlClient 命名空间中,对应的类是 SqlDataReader。

    主要用于读取表中的查询结果,并且是以只读方式读取的(即不能修改 DataReader 中存放的数据)。
    正是由于 DataReader 类的特殊的读取方式,其访问数据的速度比较快,占用的服务器资源比较少。

    2.SqlDataReader 类中常用的属性和方法如下表所示。

属性或方法说明
FieldCount属性,获取当前行中的列数
HasRows属性,获取 DataReader 中是否包含数据
IsClosed属性,获取 DataReader 的状态是否为已经被关闭
Read方法,让 DataReader 对象前进到下一条记录
Close方法,关闭 DataReader 对象
Get XXX (int i)方法,获取指定列的值,其中XXX代表的是数据类型。例如获取当前行第1列 double 类型的值,获取方法为GetDouble(o)

    3.使用 DataReader 类读取查询结果

    在使用 DataReader 类读取查询结果时需要注意。

    当查询结果仅为一条时,可以使用 if 语句查询 DataReader 对象中的数据。

    如果返回值是多条数据,需要通过 while 语句遍历 DataReader 对象中的数据。
    在使用 DataReader 类读取查询结果时需要通过以下步骤完成:

    1) 执行 SqlCommand 对象中的 ExecuteReader 方法
SqlDataReader dr=SqlCommand 类实例 .ExecuteReader();
    2) 遍历 SqlDataReader 中的结果

    SqlDataReader 类中提供的 Read 方法用于判断其是否有值,并指向 SqlDataReader 结果中的下一条记录。

dr.Read()

    如果返回值为 True,则可以读取该条记录,否则无法读取。
    在读取记录时,要根据表中的数据类型来读取表中相应的列。

    3) 关闭 SqlDataReader

    4.例:

    下面通过实例来演示 SqlDataReader 类的使用。

    根据用户姓名查询用户的编号和密码,并将编号和密码显示在标签控件 (Label) 上。
    根据姓名查询用户信息的界面如下图所示。

cf5f133d786435527bbe0c77d40b5bf6.png

    总之是2个Label控件、1个TextBox控件、1个Button控件。

    在该界面中默认情况下显示“没有符合条件的结果”,如果根据文本框中输入的用户名能查询到指定用户的信息,则将默认文字替换成用户编号和密码。

    实现该功能的代码如下。

    双击“查询”按钮,生成双击事件。

using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Data.SqlClient;using System.Drawing;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Windows.Forms;namespace WindowsFormsApp14{    public partial class Form1 : Form    {        public Form1()        {            InitializeComponent();        }        private void button1_Click(object sender, EventArgs e)        {            //编写数据库连接串            string connStr = "Data Source=.;Initial Catalog=text;User ID=sa;Password=123";            //创建 SqlConnection的实例            SqlConnection conn = null;            //定义SqlDataReader类的对象            SqlDataReader dr = null;            try            {                conn = new SqlConnection(connStr);                //打开数据库连接                conn.Open();                string sql = "select id,password from userinfo where name='{0}'";                //填充SQL语句                sql = string.Format(sql, textBox1.Text);                //创建SqlCommand对象                SqlCommand cmd = new SqlCommand(sql, conn);                //执行Sql语句                dr = cmd.ExecuteReader();                //判断SQL语句是否执行成功                if (dr.Read())                {                    //读取指定用户名对应的用户编号和密码                    string msg = "用户编号:" + dr[0] + " 密码:" + dr[1];                    //将msg的值显示在标签上                    label2.Text = msg;                }            }            catch (Exception ex)            {                MessageBox.Show("查询失败!" + ex.Message);            }            finally            {                if (dr != null)                {                    //判断dr不为空,关闭SqlDataReader对象                    dr.Close();                }                if (conn != null)                {                    //关闭数据库连接                    conn.Close();                }            }        }    }}

分析:

    首先需要追加包:using System.Data.SqlClient;

    然后生成“查询”按钮的单击事件。

        在里面先编写连接数据库的字符串。

        再创建了 SqlConnection的实例后,又定义SqlDataReader类的对象。

            而SqlDataReader类:主要用于读取表中的查询结果,并且是以只读方式读取的。也就是不能修改。

        通过new SqlConnection(connStr);连接数据库后,再编写SQl的语句字符串。

        再通过new SqlCommand进行数据库和数据库语句的连接。

        然后通过cmd.ExecuteReader();给它变个类型。

         也就能通过Read 方法进行判断其是否有值存在。

            如果返回值为 True,则可以读取该条记录,否则无法读取。

        最后在关闭 SqlDataReader。

    (也就是上面的那三个步骤。)

运行结果:

e6230e01fbb8cdaafdaca05caad73156.png

    需要注意的是,实现上述功能的要求是用户表中的用户名是唯一的,以避免出现查询错误。

二、总结回顾

    (由于这个数据库严重吃力,所以再重新回顾总结一下。)

    首先是关于数据库的下载配置,其实也都是下载软件,并开通sa账户,并且在数据库中创建数据库名称,并在数据库中的表名,在设置字段,好用于存储数据。

    都配置好后,就是在VS里的操作了。

    1.首先是连接数据库,通过创建SqlConnection的实例。

SqlConnection 连接对象名 = new SqlConnection( 数据库连接串 );

    不过在这之前,需要提前编辑“连接数据库”的SQl语句的字符串。

    第1种方式,以用户名密码的方式。

        server = 服务器名称 / 数据库的实例名 ; uid = 登录名 ; pwd = 密码 ; database = 数据库名称

    第2种方式,以用户名密码的方式。

        Data Source = 服务器名称 \ 数据库实例名 ; Initial Catalog = 数据库名称 ; User ID = 用户名 ; Password = 密码

    使用 Windows 身份验证的方式登录数据库,以将数据库连接更改如下:

        Data Source = 服务器名称 \ 数据库实例名 ; Initial Catalog = 数据库名称 ; Integrate Security = True

    2.打开数据库连接

连接对象名.Open();
    3.关闭数据库连接
连接对象名.Close();

    除了使用异常处理的方式释放资源外,还可以使用 using 的方式释放资源。

    具体的语句如下。

using(SqlConnection 连接对象名 = new SQLConnection( 数据库连接串 ))
{
    //打开数据库连接
    //对数据库先关操作的语句
}

    using 关键字的用法主要有两个,一个是引用命名空间,一个是创建非托管资源对象。

    例:

string connStr = "Data source=.;Initial Catalog=test;User ID=sa;Password=pwdpwd";using(SqlConnection conn=new SqlConnection(connStr))    {        //打开数据库连接        conn.Open();        MessageBox.Show("数据库连接成功!");    }

    连接数据库后,就是对数据库进行操作。

    1.首先是跟SQl语句的连接。

    需要SqlCommand 类的实例,并且有两种可能:

        一种是命令类型为 Text 的

SqlCommand SqlCommand 类的实例名 = new SqlCommand( SQL 语句 , 数据库连接类的实例 );

        一种是命令类型为 StoredProcedure 的。

SqlCommand SqlCommand 类的实例名 = new SqlCommand( 存储过程名称 , 数据库连接类的实例 );

        而存储过程,需要使用 SqlCommand 类实例的 Parameters 属性来设置。

SqlCommand 类实例 .Parameters.Add( 参数名 , 参数值 );

    2.执行对数据表的操作

    具体的代码如下。

SqlDataReader dr = SqlCommand 类的实例 .ExecuteReader();

    此外,如果在执行查询语句后并不需要返回所有的查询结果,而仅需要返回一个值,例如查询表中的记录行数,这时可以使用 ExecuteScalar 方法。具体的代码如下。

int returnvalue = SqlCommand 类的实例 .ExecuteScalar();

    然后就是现在的DataReader:读取查询结果

    在使用 DataReader 类读取查询结果时需要通过以下步骤完成:

    1) 执行 SqlCommand 对象中的 ExecuteReader 方法

    具体代码如下。

SqlDataReader dr=SqlCommand 类实例 .ExecuteReader();
       例
//先连接SqlCommand cmd = new SqlCommand(sql, conn);//执行Sql语句SqlDataReader dr = cmd.ExecuteReader();
    2) 遍历 SqlDataReader 中的结果

    SqlDataReader 类中提供的 Read 方法用于判断其是否有值,并指向 SqlDataReader 结果中的下一条记录。

dr.Read()

    如果返回值为 True,则可以读取该条记录,否则无法读取。
    在读取记录时,要根据表中的数据类型来读取表中相应的列。

    3) 关闭 SqlDataReader
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值