ADO.NET-离线模式操作数据集

DataSet对象支持ADO.NET断开式、分布式数据方案的核心对象,也是实现基于非连接的数据查询的核心组件。对DataSet对象可以将其看作是在内存中创建的一个小型关系数据库,它将数据库中的数据复制了一份放到用户本地的内存中,供用户在不连接数据库的情况下读取数据,充分利用了客户端资源,大大降低了数据库服务器的压力。

DataAdapter对象是一种用来充当DataSet对象与实际数据源之间桥梁的对象,可以说只要有DataSet的地方就有它,它也是专门为DataSet服务的。

DataAdapter对象的工作步骤一般有两种:一种是通过Command对象执行SQL语句从数据源中检索数据,将获取的结果集填充到DataSet对象的表中;另一种是用户对DataSet对象做出的更改写入到数据源中。

1.离线模式数据库遍历

2.离线模式更新数据库(插入)

3.离线模式更新数据库(更新)



//离线模式遍历数据库

 

            SqlConnection conn = null;

            SqlDataAdapter sda = null;

            DataSet ds = null;

            string constr = "server = .;database = company;uid = sa;pwd = 1234";

 

            try {

                conn = new SqlConnection(constr);

                conn.Open();

                

                //创建适配器对象

                string sql = "select empno,ename,job,mgr,hiredate,sal,comm,deptno from emp";

                sda = new SqlDataAdapter(sql,conn);

                //创建数据集对象

                ds = new DataSet();

                //将适配器查询出的结果填充到数据集中

                sda.Fill(ds,"emp");

                //遍历数据集对象用来显示数据

                foreach(DataRow drin ds.Tables["emp"].Rows){

                    Console.WriteLine(dr["empno"]+"-"+dr["ename"]+"-"+dr["job"]+"-"+dr["deptno"]);

                }

            }

            catch (Exception ex)

            {

                Console.WriteLine(ex.Message);

            }

            finally {

                if(ds.IsInitialized){

                    ds.Clear();

                    ds = null;

                }

                if(sda != null){

                    sda.Dispose();

                }

                if(conn != null && conn.State == ConnectionState.Open){

                    conn.Close();

                }

            }

 //利用离线模式更新数据库(插入)
            string constr = "server = .;database = company;uid = sa;pwd = 1234";
            SqlConnection conn = null;
            SqlCommand insertCmd = null;


            try { 
                conn = new SqlConnection(constr);
                SqlDataAdapter sda = new SqlDataAdapter("select * from emp",conn);


                insertCmd = new SqlCommand("insert into emp(empno,ename,deptno)values(@empno,@ename,@deptno)",conn);
                SqlParameter[] param = {
                                       new SqlParameter("@empno",SqlDbType.Int),
                                       new SqlParameter("@ename",SqlDbType.VarChar),
                                       new SqlParameter("@deptno",SqlDbType.Int),
                                       };
                param[0].Value = 1;
                param[1].Value = "Tom";
                param[2].Value = 20;


                insertCmd.Parameters.Add(param[0]);
                insertCmd.Parameters.Add(param[1]);
                insertCmd.Parameters.Add(param[2]);


                sda.InsertCommand = insertCmd;
                DataSet ds = new DataSet();
                sda.Fill(ds,"tb_emp");
                //需要将数据添加到数据集中
                
                ds.Tables["tb_emp"].Rows.Add(data);
                sda.Update(ds, "tb_emp");


            }
            catch(Exception ex){
                Console.WriteLine(ex.Message);
            }
            finally{
                if(insertCmd != null){
                    insertCmd.Dispose();
                }
                if(conn != null && conn.State == ConnectionState.Open){
                    conn.Close();
                }
            }


//利用离线模式更新数据库(数据更新)
            string constr = "server = .;database = company;uid = sa;pwd = 1234";
            SqlConnection conn = null;
            SqlCommand updateCmd = null;
            try {
                conn = new SqlConnection(constr);
                SqlDataAdapter sda = new SqlDataAdapter("select * from emp",conn);
                updateCmd = new SqlCommand("update emp set ename = @ename where empno = @empno", conn);
                SqlParameter[] param = {
                                      new SqlParameter("@ename",SqlDbType.VarChar),
                                      new SqlParameter("@empno",SqlDbType.Int),
                                      };
                param[0].Value = "Roose";
                param[1].Value = 1;
                updateCmd.Parameters.Add(param[0]);
                updateCmd.Parameters.Add(param[1]);
                sda.UpdateCommand = updateCmd;
                DataSet ds = new DataSet();
                sda.Fill(ds,"tb_emp");
                //需要将数据添加到数据中
                
                foreach(DataRow dr in ds.Tables["tb_emp"].Rows){
                    if(Convert.ToInt32(dr["empno"]) == 1){
                        dr["ename"] = "Roose";
                    }
                }
                sda.Update(ds,"tb_emp");
                Console.WriteLine("数据修改成功!");
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
                Console.WriteLine("数据修改失败");


            }
            finally { 
                if(updateCmd != null){
                    updateCmd.Dispose();
                }
                if(conn != null && conn.State == ConnectionState.Open){
                    conn.Close();
                }
            }

你可能感兴趣的:(c#学习笔记)