从sqlcommandbuilder引出的小想法
来源:互联网 发布:贾平凹秦腔读后感知乎 编辑:程序博客网 时间:2024/05/02 03:03
数据库到底是怎么更新的
之前在看C#操作数据库的时候,大体流程都明白了,就是在看到对数据库的更新的时候:
SqlCommandBuilder mySqlCommandBuilder = new SqlCommandBuilder(myDataAdapter); // 为myDataAdapter赋予SqlCommandBuilder功能myDataAdapter.Update(myDataSet, "表名"); // 向数据库提交更改后的DataSet,第二个参数为DataSet中的存储表名,并非数据库中真实的表名(二者在多数情况下一致)
在看到新建了一个mysqlcommandbuilder对象,却没有使用到,为什么对于数据库的更新不能仅仅使用dataAdapter.Update()的方法呢?非要新建一个看起来后面根本没有用到的commandbuilder呢?
首先说明第一个问题:直接使用DataAdapter.Update()方法只能更新本地的数据库,即本地建立的DataSet的对象,这个本地数据库的更新并不会自动更新与之关联的数据库(SQL Sever)。如果要实现同步的更新,那么就得采用两种方法:一种是手动的写入sql命令,即通过设置DataAdapter的SelectCommand属性,将想要对数据库的操作写进去,示例代码如下(都是我抄的哈~):
SqlConnection sqlCnt = new SqlConnection(connectString);sqlCnt.Open();// 创建SqlCommandSqlCommand mySqlCommand = new SqlCommand();mySqlCommand.CommandType = CommandType.Text;mySqlCommand.CommandText = "select * from product";mySqlCommand.Connection = sqlCnt;// 创建SqlDataAdapterSqlDataAdapter myDataAdapter = new SqlDataAdapter();myDataAdapter.SelectCommand = mySqlCommand;// 为SqlDataAdapter对象绑定所要执行的SqlCommand对象当然也可以简写一下,即省略掉SqlCommand的定义,直接将操作数据库的语句写进去:
sqlCnt.Open();// 隐藏了SqlCommand对象的定义,同时隐藏了SqlCommand对象与SqlDataAdapter对象的绑定SqlDataAdapter myDataAdapter = new SqlDataAdapter("select * from product", sqlCnt);如果设置了DataAdapter.SelectCommand属性,(则可以创建一个 SqlCommandBuilder 对象来自动生成用于单表更新的 Transact-SQL 语句。 然后,SqlCommandBuilder 将生成其他任何未设置的 Transact-SQL 语句)这句话来自msdn,我猜他的意思是如果设置了这个属性,会自动为DataAdapter新建一个CommandBuilder吗?
而第二种方法就是显示的使用SqlCommandBuilder——他自动为与之相关联的DataAdapter生成相应的Transact-SQL 语句。在msdn中对于SqlCommandBuilder的的定义:自动生成单表命令,用于将对 DataSet 所做的更改与关联的 SQL Server 数据库的更改相协调。 他采用的方法是:SqlCommandBuilder 将DataAdapter本身注册为 RowUpdating 事件的侦听器。 一次只能将一个SqlDataAdapter 与一个 SqlCommandBuilder 对象(或相反)互相关联。
所以说,我所纠结的这个SQLCommandBuilder为啥只新建了一个对象而没有其他的作为,只是因为——他是作为一个监听器来监听DataAdapter的!如果我们在本地对DataSet有了改变,那么这个改变被监听到了,SqlCommandBuilder就会自动生成相应的SQL语句去更新数据库。
此处用到的设计模式
- 从sqlcommandbuilder引出的小想法
- 从sqlcommandbuilder引出的小想法
- 从加载igb驱动引出一些想法
- 搜索的小想法
- 从const_cast引出的一个问题
- 从一个String类引出的问题
- 从一个错误引出的思考
- 从Openfiler引出的存储体系学习
- 一个C++小题目引出的问题
- @Data 注解引出的 lombok 小辣椒
- @Data 注解引出的 lombok 小辣椒
- SqlCommandBuilder 的使用
- SqlCommandBuilder的运用
- SqlCommandBuilder的运用②
- SqlCommandBuilder 的使用实例
- C# SqlCommandBuilder的用法
- SqlCommandBuilder 的使用
- 如何从N个数中选出最大(小)的n个数?我的想法
- C++中引用、指针,传值的联系和区别
- 使用navicat建立与服务器的远程mysql连接
- 无线键鼠接收器丢了怎么办
- 初学MCMC(Markov Chain Monte Carlo)
- IOS开发-初识CoreData
- 从sqlcommandbuilder引出的小想法
- 关于java 值传递
- poi 公式缓存,多次计算公式值不变
- 快速排序详解
- Android4.4编译出现checkapi错误及解决办法
- MIT自然语言处理第四讲:标注
- ssh框架初体验
- catia v5r20破解版 32位&64位 安装说明方法
- Java基础知识之IO流(一)