• 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();
            
            }
  • 相关阅读:
    docker容器打包、镜像文件导入与导出 , 支持批量
    服务器高并发配置优化
    php集成财付通支付接口
    C# 防界面假死
    以二进制方式读取图片保存到string
    转载 C#开发串口总结,并提炼串口辅助类到公用类库中
    C# comport 打印图像
    C#实现MD5加密
    execute sp_executesql 用变量获取返回值
    C# 获取计算机cpu 硬盘 网卡信息
  • 原文地址:https://www.cnblogs.com/mamiyiya777/p/5909912.html
Copyright © 2020-2023  润新知