SqlDataReader的認識


跟其他類一樣,使用它需要先聲明對象.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();
        }


 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章