C#中用SqlDataAdapter修改数据库中的表(源码+注意的细节)


标题
      C#中用SqlDataAdapter修改数据库中的表
 
 【内容】
         /*
修改数据集中的表,然后保存到数据库中。
传入的参数:
String sql=""

       sql+="select * from tb1";
       sql+=Environment.NewLine; 
       sql+="select * from tb2";
 
注意:查询语句必须要查询出表的所有字段。
      
*/
public void UpdateDataFromDSToDB(string sql)
        {
            SqlConnection conn = new SqlConnection(ADDbBase.SqlStr);

            SqlDataAdapter sda = new SqlDataAdapter();

     //下面的两句很关键,利用SqlCommandBuilder对象与一个合法的SelectCommand对象,
     //来填充SqlDataAdapter 对象的全部4个命令属性
            sda.SelectCommand = new SqlCommand(sql,conn); 
            SqlCommandBuilder scb = new SqlCommandBuilder(sda); 

            conn.Open();

            DataSet ds = new DataSet();
            sda.Fill(ds); //数据集中包含两张表

            //modify data in dataset
            DataTable dtOne = ds.Tables[0];
            DataTable dtTwo = ds.Tables[1];
    
            for(int i=0; i<dtOne.Rows.Count; i++)
            {
                bool modify = false;
                int num = 0;
                for(int j=0; j<dtTwo.Rows.Count; j++)
                {
                    if(dtOne.Rows[i]["cateInherit"].ToString() == dtTwo.Rows[j]["cateUpID"].ToString())
                    {
                        dtTwo.Rows[j]["cateUpID"] = dtOne.Rows[i]["cateid"];
                        modify = true;
                        num++;
                    }
                    else
                    {
                        modify = false;
                    }

                    if(modify == false && num != 0)
                    {
                        break;
                    }
                }
            }
            

            try
            {
               //修改数据源,Update方法首先获取DataTable对象的变化情况,然后逐行地修改
        //在ADO.NET 2.0中,可以在Update之前设置UpdateBatchSize的值,以一批修改多条记录的方式
        //发送给数据库,来提高性能
                sda.Update(dtTwo);
            }
            catch(Exception ex)
            {
                Util.AlertMesg(ex.Message); //Util是自己定义的方法
            }
            finally
            {
                conn.Close();
            }

        }


【注意的细节】

   1、UpdateDataFromDSToDB是封装的方法,参数为SQL语句。这里表示从两张表中查询数据。
      其中SQL语句必须要查询出表的所有字段。

   2、ADDbBase.SqlStr:数据库连接字符串,ADDbBase是我自己定义类
  
   3 、
      sda.SelectCommand = new SqlCommand(sql,conn);
      
SqlCommandBuilder scb = new SqlCommandBuilder(sda); 
      这两句很关键,请参考上面的说明。
  
  4、sda.Update(dtTwo),这里不能使用sda.Update(ds ),否则,即时不报错,但数据源并没有更新。
        其中dtTwo为已经修改了的表;ds表示数据集,其中有dtOne 和dtTwo两张表,但是dtOne没有被修
        改。
 
  5、UpdateDataFromDSToDB方法的参数值如下:
       sql+="select * from tb1";
       sql+=Environment.NewLine; 
       sql+="select * from tb2";
   
        通过该Sql 命令,获得两张表,并填充到数据集对象中

 【Tags】C#,MS SQL, DataSet,SqlDataAdapter
      

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值