SqlCommandBuilder的讨论

之前也看过别人的解释,总感觉解释的不太理想,当然我自己的解释我尽量解释理想点,SqlCommandBuilder 是提供给外界对数据库的反操作的,如果只是对数据库的一个提取的话,那么用下面的代码足以

        public DataSet getDataset(string sqlstr)
        {
            Conn.Open();
            SqlDataAdapter da = new SqlDataAdapter(sqlstr,Conn);
            DataSet ds = new DataSet();
            da.Fill(ds);
            Conn.Close();
            return ds;
        }

但是如果数据在 dataGridView中显示出来,而且我们又要求在 dataGridView中能修改数据库的话,我们必须要重新进行一次操作,只是用上面的显示语句是不够的。如果是你,你要怎么做呢?当然我会重新引入一个升级的语句,但是当我引入升级的语句的时候,我要对数据库重新操作(对内存中的数据经行操作DATESET),注释:DATASET是可以脱离SQL再任何环境下运行的数据,因为他是XML格式的,这时候我们需要引入SqlCommandBuilder,这个的作用是对dataset和adaper的一次重建,有一点是肯定的,adapter.Update(或者说CommandBuilder)肯定会对dataGridView进行监控,你可以试下如果我们没有触碰dataGridView中的任何控件(当然点击一下也会不行),这样程序是不会报错的。

    总结:   我们再理一下思路,adaper是个中间控件,如果我们要对数据库进行修改的话 DB---Adaper-----DATASET----dataGridView 绿色部分应该是SqlCommandBuilder的作用,链接和监视作用,如果DATASET或者DataGridView没有任何动作的话,是不会触发的

SqlCommandBuilder是对内存中(即DATASET)的一个监控,因为dataGridView的源头是DATASET(见下面程序),如果你没有任何触发的话,我是不会运行的。如果你有更改dataGridView的话,那么就触发了SqlCommandBuilder这个类

  DataSet1 = DataAccess1.getDataset(sqlstr);
            dataGridView1.DataSource = DataSet1.Tables[0];    
 

以上是我自己的理解

——————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————

当然另外一种理解说是“SqlDataAdapter不会自动生成实现DataSet的更改与关联的 SQL Server 实例之间的协调所需的 Transact-SQL 语句。”adaper只是个连接器,但是你想修改数据库的话要提供另外一个语句来修改他,一样的,只不过这是英文直译的(应该是),好多计算机书籍都是这样机器翻译的,对我们读者是一个很大的挑(误)战(导)!

 

 

 


 

  public void updatedata(DataSet ds,string sqlstr)
        {
            Conn.Open();
            SqlDataAdapter da = new SqlDataAdapter(sqlstr, Conn);

            //SqlCommandBuilder cb = new SqlCommandBuilder(da);

            da.Update(ds);

            Conn.Close();
        
        }

 

转载于:https://www.cnblogs.com/mamiyiya777/p/5909912.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值