SqlDataReader的认识

来源:互联网 发布:数据精灵有安卓版吗 编辑:程序博客网 时间:2024/05/21 09:53
跟其他类一样,使用它需要先声明对象.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();        }


 

 

原创粉丝点击