C#学习补充之ado.net

1.数据集DataSet
2.利用DataTable对象获取数据(记录集)
3.打开数据库获取数据

1.数据集DataSet

//创建一个内存的数据集
            DataSet ds =new DataSet("DS5");

            //创建一张内存表
            DataTable dt1 =new DataTable("dt1");

            //把表放到数据集里面去。
            ds.Tables.Add(dt1);

            //给表定义列
            DataColumn dcName = new DataColumn("Name",typeof(string));
            DataColumn dcAge = new DataColumn("Age",typeof(int));
            DataColumn dcId=new DataColumn("Id",typeof(int));

            //把列放到表里面去。
            dt1.Columns.AddRange(new DataColumn[]{dcId,dcName,dcAge});

            //给表添加数据
            dt1.Rows.Add(1, "老马", 18);
            dt1.Rows.Add(1, "赵黑", 29);
            dt1.Rows.Add(1, "老王", 18);
            dt1.Rows.Add(1, "老汪", 19);
            foreach(DataTable tb in ds.Tables)
            {
                foreach (DataRow dataRow in tb.Rows)
                {
                    Console.WriteLine(dataRow[0]+"  " +dataRow[1]+"  "+dataRow[2]);
                }
            }

2.利用DataTable对象获取数据(记录集)/*注意:如果DataTable获取记录,不用打开数据库,即Open()*/

1)新建SqlConnection对象

//第一步:新建SqlConnection对象

string ConnStr = "Data Source=.;Initial Catalog=ADO_DEMO;Integrated Security=True"; SqlConnection SqlConn = new SqlConnection(); //设置SqlConnection对象的连接字符串; SqlConn.ConnectionString = ConnStr;

2)新建SqlCommand对象

//新建SqlCommand对象
            SqlCommand cmd_datatable = new SqlCommand();

            //设置SqlCommand对象的Connection属性,即:SqlConn(SqlConnection类型的对象)
            cmd_datatable.Connection = SqlConn;
//如果是执行INSERT/UPDATE/DELETE的SQL语句,可以直接设置CommandText属性
            //如果是执行存储过程,则必须设置CommandType属性为CommandType.StoredProcedure
            cmd_datatable.CommandText = "SELECT * FROM Ex_Class";

3)新建一个SqlDataAdapter对象

//新建一个SqlDataAdapter对象,用来向DataTable填充数据
            SqlDataAdapter sda = new SqlDataAdapter();

            //设置SqlDataAdapter对象对应的SqlCommand对象
            sda.SelectCommand = cmd_datatable;

4)新建一个DataTable对象

 //新建一个DataTable对象,用来接收SqlDataAdapter对象传递过来的数据
            DataTable dt = new DataTable();

            //调用SqlDataAdapter对象的Fill方法,将数据填充到DataTable
            sda.Fill(dt);

5)使用DataTable中的数据

//接下来可以使用DataTable中的数据,比如获取第一行的值:
            string MyClassName = Convert.ToString(dt.Rows[0]["ClassName"]);
            int MyClassCount = Convert.ToInt32(dt.Rows[0]["ClassCount"]);

            Response.Write(string.Format("DataTable返回一条记录:ClassName:{0} ClassCount:{1}<br><br>", MyClassName, MyClassCount));

            //也可以使用foreach遍历DataTable中的数据
            List<Model> DList = new List<Model>();
            foreach(DataRow dr in dt.Rows)
            {
                Model Obj = new Model();
                Obj.ClassName = Convert.ToString(dr["ClassName"]);
                Obj.ClassCount = Convert.ToInt32(dr["ClassCount"]);
                DList.Add(Obj);

                //或者直接输出值
                Response.Write(string.Format("DataTable返回多条记录:ClassName:{0} ClassCount:{1}<br><br>", dr["ClassName"], dr["ClassCount"]));
            }

3.打开数据库获取数据

1)创建连接对象SqlConnection

//参数含义:
//server(data source):要连接的数据库服务器的地址
//user id:sql server身份验证的登录名
//password:密码
//database(initial catalog):使用的数据库
string connString = @"server=.sql2012;userid=sa;password=123;database=StuDB"; 
SqlConnection conn= new SqlConnection(connString);
//打开连接
conn.Open();

2)创建Command对象

SqlCommand cmd = new SqlCommand("select * from student", conn);

3)调用Command对象的ExecuteReader()方法,返回一个DataReader对象

SqlDataReader dr = cmd.ExecuteReader();

4)判断DataReader对象是否包含数据行,如果没有数据行,返回false

if (!dr.HasRows)
{
MessageBox.Show("没有查询您要的学员信息!");
return;
}

5)通过DataReader对象读取每一行的数据,如果能读取到下一行,则返回true,如果读取结束,返回false

while (dr.Read())
{
//通过DataReader对象[列的下标]获得指定列的值,返回object类型的值                    
txtName.Text = dr[0].ToString();
//通过DataReader对象[列的名称]获得指定列的值,返回object类型的值
cmoSex.SelectedItem = dr["sex"];
dtpBirthday.Value = (DateTime)dr["sbirthday"];
txtEmail.Text = dr["semail"].ToString();
txtId.Text = dr["sId"].ToString();
comClass.SelectedValue = dr["classNo"];//设置班级下拉列表的选中项
}

6)关闭DataReader对象,关闭数据库连接

dr.Close();
conn.Close();
原文地址:https://www.cnblogs.com/mango1997/p/13985490.html