C# 之SQL DataReader 访问数据

2020-10-22 11:15发布

DataReader 对象提供了用顺序的,只读的方式读取Command对象获得的数据结果集,正是因为DataReader是以顺序的方式连续的读取数据,所有DataReader会以独占的方式打开数据库的连接

 

由于DataReader只执行读的操作(只读),并且每次只在内存缓冲区里存储结果集中的一条数据,所有使用DataReader的对象的效率比较高,如果要查询大量数据,同时不需要随机访问和修改数据,DataReader是优先的选择

 

 

DataReader 对象的常用属性

FieldCount 属性 表示记录中有多少字段

HasRows 属性 用来表示DataReader是否包含数据

IsClosed 属性 表示DataReader是否关闭

 

DataReader对象常用方法

Close 方法 将DataReader对象关闭

GetDataTypName 方法 取得指定的字段数据形态(类型)

GetName 方法 取得指定的字段数据名称

GetOrdinal 方法 取得指定字段名称在记录中的顺序

GetValue 方法 取得指定字段的数据

GetValues 方法 取得全部字段的数据

Read 方法 读取下一条记录

实例 : mytable01表中有Id,姓名(name),年龄(age),性别(gender),部门(department),几个字段,并且有几条语句

using System;

using System.Data.SqlClient;

 

namespace DataReaderDemo

{

    class Program

    {

        static void Main(string[] args)

        {

            string constr = "Server = .; user=name;pwd=mima;database=mysql";

            SqlConnection myCon = new SqlConnection(constr);

            try

            {

                myCon.Open();

                string sql = "select * from mytable01 ";

                SqlCommand mycom = new SqlCommand(sql, myCon);

                //声明DataReader

                SqlDataReader mydr;

                mydr = mycom.ExecuteReader();

                if (mydr.HasRows)     

                {

                    Console.WriteLine("mytable01中存在数据");

                }

                else

                {

                    Console.WriteLine("mytable01中不存在任何数据");

                }

                //----------------方法----------------------

                Console.WriteLine("第一列的数据类型"+mydr.GetDataTypeName(0));

 

                Console.WriteLine("获取对应列的名称:(第一列)"+mydr.GetName(0));

 

                string mystr = "age";    //直接写会报异常,需要有个转换的过程

                Console.WriteLine(mydr.GetOrdinal(mystr));

                /*  此时将上面的15行的str,换为

                 *   string sql = "select * from mytable01 where id=1";

                if (mydr.Read())

                {

                    Console.WriteLine("取得指定字段的数据:" + mydr.GetValue(0));

                }

                 */

 

                /*将15行的 str更改为:

                 *  string sql = "select * from mytable01 where gender='男'";

                object[] myobj = new object[mydr.FieldCount];

                while(myde.Read()){

                    mydr.GetValues(myobj);

                    foreach (object item in myobj)

                    {

                        Console.Write(item + "\t");

                        Console.WriteLine();

                    }

                 }  

                */

                //访问DataReader 对象时使用索引要比字段名称快很多

                while (mydr.Read())

                {

                    Console.WriteLine(mydr[0].ToString()+",");

                    Console.WriteLine(mydr[1].ToString() + ",");

                    Console.WriteLine(mydr["gender"].ToString());

                }

 

                //----------------属性----------------------

                Console.WriteLine("表中有几个字段:"+mydr.FieldCount);

 

                Console.WriteLine("是否关闭:"+mydr.IsClosed);

                mydr.Close();

                Console.WriteLine("是否关闭:" + mydr.IsClosed);

            }

            catch(Exception ex)

            {

                Console.WriteLine(ex.Message.ToString());

            }

            finally

            {

                myCon.Close();

            }

 

            Console.Read();

        }

    }

}


作者:Czhenya

链接:https://czhenya.blog.csdn.net/article/details/77484468

来源:CSDN
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。