• C#与数据库访问技术总结(十二)数据阅读器(DataReader)2


    遍历数据阅读器中的记录

    当ExecuteReader方法返回DataReader对象时,当前光标的位置在第一条记录的前面

    必须调用阅读器的Read方法把光标移动到第一条记录,然后,第一条记录将变成当前记录。

    如果数据阅读器所包含的记录不止一条,Read方法就返回一个Boolean值true。

    想要移到下一条记录,需要再次调用Read方法。重复上述过程,直到最后一条记录,那时Read方法将返回false。

    经常使用while循环来遍历记录:

        while(reader.Read())

        {

              //读取数据

        }

        只要Read方法返回的值为true,就可以访问当前记录中包含的字段。

    访问字段中的值

    ADO.NET提供了两种方法访问记录中的字段。

    第一种是Item属性,此属性返回由字段索引或字段名指定的字段值。

    第二种方法是Get方法,此方法返回由字段索引指定字段的值。

    DataReader类有一个索引符,可以使用常见的数组语法访问任何字段。

    使用这种方法,既可以通过指定数据列的名称,也可以通过指定数据列的编号来访问特定列的值。

    第一列的编号是0,第二列编号是1,依次类推。例如:

    Object value1=myDataReader["学号"];

    Object value1=myDataReader[0];

    Item属性

    每一个DataReader类都定义了一个Item属性,此属性返回一个代码字段属性的对象。

    Item属性是DataReader类的索引。

    需要注意的是Item属性总是基于0开始编号的:

    object FieldValue=reader[FieldName];

    object FieldValue=reader[FieldIndexl;

    可以把包含字段名的字符串传入Item属性,也可以把指定字段索引的32位整数传递给Item属性。

    例如,如果命令是SQL select查询:

    Select ID, cName  from course

    使用下面任意一种方法,都可以得到两个被返回字段的值:

    object ID=reader ["ID"]

    object cName=reader ["cName"];

    或者:

    object ID=reader[0];

    object cName=reader [1];

    另外需要注意的是,在使用数据时需要自己负责类型转换,如下所示:

    int ID=(int)reader[0];

    String cName=(string)reader[1];

    注意:如果类型转换错误,例如将非数字类型转化为整型,将会在运行时抛出异常。

    Get方法

    除了通过索引访问数据外,DataReader类还有一组类型安全的访问方法可以用于读取指定列的值。

    这些方法是以Get开头的,并且它们的名称具有自我解释性。

    例如GetInt32()、GetString()等。

    这些方法都带有一个整数型参数,用于指定要读取列的编号。

    每一个DataReader类都定义了一组Get方法,那些方法将返回适当类型的值。

    例如,GetInt32方法把返回的字段值作为32位整数。

    每一个Get方法都接受字段的索引,

    例如在上面的例子中,使用以下的代码可以检索ID字段和cName字段的值:

    int ID=reader. Getint32 (0);

    string cName=reader. GetString(1);

    实例演示DataReader

    在这个例子中,将读取所有的学生信息并将其显示出来。

    (1)启动Visual Studio,新建一个名为DataReaderTest的WindowsApplication项目。

    (2)在Forml.cs的空白处双击鼠标,进入Page—Load事件。Page_Load事件在页面加载时执行。

    (3)首先在Forml.cs中添加SqlClient的命名空间:

    using System. Data. SqlClient;

    (4)在Page_Load事件中添加如下代码:

    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;
    using System.Data.SqlClient;
    namespace DataReaderTest
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
            private void Form1_Load(object sender, EventArgs e)
            {
                //定义输出消息
                string message="";
                //新建连接对象
                SqlConnection conn=new SqlConnection();
                conn.ConnectionString="Data Source=(local);Initial Catalog=Student;Integrated Security=SSPI";
                //拼接命令字符串
                string selectQuery="select ID, sName,sGrade,sSex from studentInfo";
                //新建命令对象
                SqlCommand  cmd=new SqlCommand(selectQuery, conn);
                conn.Open( );
                //关闭阅读器时将自动关闭数据库连接
                SqlDataReader reader=cmd. ExecuteReader(CommandBehavior.CloseConnection);
                //循环读取信息
                while (reader.Read())
                {
                    message+="学号:"+reader[0].ToString()+" ";
                    message+="姓名:"+reader["sName"].ToString()+" ";
                    message+="班级:"+reader.GetString(2)+ " ";
                    message+="性别:"+reader.GetString(3)+" ";
                    message+="
    ";
                }
                //关闭数据阅读器
                //无需关闭连接,它将自动被关闭
                reader.Close();
                //测试数据连接是否已经关闭
                if(conn.State==ConnectionState.Closed)
                {
                    message+="数据连接已经关闭
    ";
                }
                MessageBox.Show(message);
            }
        }
    }
  • 相关阅读:
    python之九九乘法表
    python选择排序有序区域和无序区域
    mysql学习笔记(一)
    cuda toolkit安装
    vs 无法打开输入文件“kernel32.lib”
    vs libtorch 无法定位程序输入点…于动态链接库…exe
    libtorch 部署 windows10
    openvino记录
    AcWing 803.区间合并
    AcWing 802.区间和
  • 原文地址:https://www.cnblogs.com/zi-xing/p/4056284.html
Copyright © 2020-2023  润新知