DataReader的用法程序简析

// 2015/07/05
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data;
using System.Data.SqlClient;

namespace DataReaderSample
{
    class Program
    {
        static void Main(string[] args)
        {
            // 集合,强类型的集合
            System.Collections.Generic.List<StudentModel> list = new List<StudentModel>();

            string connectionString = "server=.;database=BookSample;uid=LJK;pwd=123456";
            using (SqlConnection connection = new SqlConnection(connectionString))
            {
                connection.Open();
                string sql = "select ID,StuName ,phone from students";
                SqlCommand cmd = new SqlCommand(sql,connection);

                // 通过数据库中的游标来辅助查询结果
                SqlDataReader reader = cmd.ExecuteReader();

                // DataReader 通过 Read 方法来读数据库中的记录
                while (reader.Read())
                {
                    Console.WriteLine("成功读取了一条记录");
                    // 读取的数据保存在 DataReader 对象内
                    int stuId = reader.GetInt32(0);
                    string stuName = reader.GetString(1);
                    string Phone = reader.GetString(2);

                    //上面的程序还可以用下面的代码代替(第二种方法)
                    //这种方法得出的是object类型,所以要强制转换一下
                    //int stuId = (int)reader[0];(值类型)
                    //string stuName = reader[1] as string;(引用类型)
                    //string Phone = reader[2];
                                      
                    //另外一种方式,下标为字段名,即使select语句修改也无影响
                    //string stuName = reader["StuName"] as string;(引用类型)

                    // 将读取的数据表示为对象实例
                    StudentModel model = new StudentModel();
                    model.StuID = stuId;
                    model.Stuname = stuName;
                    model.phone = Phone;

                    list.Add(model);

                    // 输出字段
                    // Console.WriteLine("StuId:{0}  StuName = {1} Phone = {2}",stuId,stuName,Phone);
                    // Console.WriteLine("StuId:{0}  StuName = {1} ", stuId, stuName);
                }
                // 游标也必须关闭
                reader.Dispose();
            }
            // 当读取完成的时候,我们得到一个集合,其中包含若干个的对象实例
            // 这些对象实例的数据来自数据库

            foreach (StudentModel model in list)
            {
                Console.WriteLine("{0}   {1}   {2}",model.StuID,model.Stuname,model.phone);
            }
            Console.ReadKey();
        }
    }
}
/*
数据库中的数据是 null,与.NET下的null不一致
数据库中的null在.NET环境下,专门使用一个特殊的类型来表示
    System.DBNull.Value
可用如下方法解决:
    string region = null;
    if(!reader.IsDBNull(3))
    {
       region = reader.GetString(3);
    }
//假如为整形方法如下:
可空类型,只能用于值类型
int? reportsTo -= null;
//对于可控类型来说,现在也有两个状态
//reportsTo.HasValue
//reportsTo.Value

if(!reader.IsDBNull(4))
{
    reportsTo = reader.GetInt32(4);
}
 */

//另一个类
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace DataReaderSample
{
    public class StudentModel
    {
        private int stuId;
        public int StuID
        {
            get { return stuId;}
            set { stuId = value;}
        }
        public string Stuname { set; get; }
        public string phone { set; get; }

    }
}


//仅仅读取第一行第一列的值方法如下
// 2015/07/05
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data;
using System.Data.SqlClient;

namespace DataReaderSample
{
    class Program
    {
        static void Main(string[] args)
        {
            string connectionString = "server=.;database=BookSample;uid=LJK;pwd=123456";
            using (SqlConnection connection = new SqlConnection(connectionString))
            {
                connection.Open();
                string sql = "select ID,StuName ,phone from students";
                SqlCommand cmd = new SqlCommand(sql, connection);

                //仅仅读取第一行第一列的值
                object obj = cmd.ExecuteScalar();
                //如果一条数据都没有读到,那么返回null
                if (obj != null)
                {
                    int id = (int)obj;
                    Console.WriteLine("obj = {0}", id);
                }
                else
                {
                    Console.WriteLine("没有读到数据!");
                }
                // 通过数据库中的游标来辅助查询结果
                //SqlDataReader reader = cmd.ExecuteReader();

                // DataReader 通过 Read 方法来读数据库中的记录
                //if (reader.Read())
                //{
                //    int stuid = reader.GetInt32(0);
                //    Console.WriteLine(stuid);
                //}
                //reader.Dispose();
            }
         
            Console.ReadKey();
        }
    }
}

  

原文地址:https://www.cnblogs.com/IamJiangXiaoKun/p/4622556.html