SqlDataReader的认识

本文介绍如何使用SqlDataReader对象处理数据库查询结果,包括声明对象、判断查询结果是否存在、获取列索引及读取多行数据的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


跟其他类一样,使用它需要先声明对象.SqlDataReader rd=new comd.ExecuteReader();(在使用SqlCommand对象的时候)

        SqlDataReader有一个HasRows属性,可以判断出查询的结果集中有没有数据.可以把rd理解成有一个小人,他去数据库中跑了一趟,目的是去看看在执行查询后有没有数据.回来的时候手里有一张纸条,写着有没有数据.如果有数据,就可以再调用rd的reader()方法,去一条条的取数据放到本地.如果有多天数据可以用循环来读取.

         一个例子:

static void Main(string[] args)
        {
            string constr = "data source=thinkpad-think;initial catalog =itcast2013;integrated security=true";
            using (SqlConnection conn = new SqlConnection(constr))
            {
                string sqlstr = "select * from tblperson";
                using (SqlCommand comd = new SqlCommand(sqlstr, conn))
                {
                    conn.Open();
                    using (SqlDataReader reader = comd.ExecuteReader())
                    {
                        if (reader.HasRows)
                        {
                            //在循环外面先根据列名获取列的索引
                            int unameIndex = reader.GetOrdinal("uname");
                            int autoIdIndex = reader.GetOrdinal("autoId");
                            //然后在循环中使用 unameIndex,autoIdIndex来进行索引..就可以解决按照固定顺序来进行显示的问题
                            
                            //根据索引获取列名
                            //reader.GetName()
                            while (reader.Read())
                            {
                                //通过datareader获取值,方法一:
                                //reader[index]通过reader的"索引器"来获取列
                                //reader[列名]索引器也可以写列名来访问列数据
                                //方法二 :reader.getvalue(index);
                                //=========以上两种那方法返回的都是object类型

                                //============"强类型"获取列的数据
                                //这里reader.getint32(列索引),索引取决于查询时,指定的顺序,并不是与表中的列索引始终一致
                                //切记:在循环里面一定要使用列索引来获取数据
                                //不要在循环中使用列名获取数据
                                
                                int autoid = reader.GetInt32(0);
                                string uname = reader.GetString(1);
                                //当表中数据为null是,直接调用reader.getxxx()这种方法会报异常
                                //解决:先判断当前列的数据是否为null 
                                int age = reader.IsDBNull(2) ? -1 : reader.GetInt32(2);
                                int height = reader.IsDBNull(3) ? -1 : reader.GetInt32(3);
                                Console.WriteLine(  "{0}     {1}      {2}    {3}",autoid,uname,age,height);
                            }
                        }
                    }
                }
            }
            Console.ReadKey();
        }


 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值