SqlCommandBuilder的作用
最近看一个案例,关于如何向数据库传数据,颇有发现。
以前我的数据都是采用Sql代码用SqlCommand一条一条语句的传入数据库。
但是今天发现有更好的方法。
代码如下:
SqlConnection cn=new SqlConnection(ConStr);
DataSet DS=new DataSet();
SqlDataAdapter Sda=new SqlDataAdapter("Select * from Table1",cn);
try
{
Sda.Fill(DS,"Table1");
MessageBox.Show(DS.Tables[0].Rows.Count.ToString());
}
catch(Exception er)
{
MessageBox.Show(er.Message);
}
//DataSet DS2=DS.Clone();
//Sda.SelectCommand=new SqlCommand("Select * from Table1");
DataRow dr=DS.Tables[0].NewRow();
dr["F1"]=5;
dr["F2"]=5;
dr["F3"]=5;
DS.Tables[0].Rows.Add(dr);
dr=DS.Tables[0].NewRow();
dr["F1"]=6;
dr["F2"]=6;
dr["F3"]=6;
DS.Tables[0].Rows.Add(dr);
SqlCommandBuilder SCB=new SqlCommandBuilder(Sda);
try
{
Sda.Update(DS,"Table1");
}
catch(Exception er)
{
MessageBox.Show(er.Message);
}
Sda.Dispose();
cn.Close();
数据库用的是SQL2000,先在数据库中建立Table1的临时表,建立字段MainID,F1,F2,F3
初始数据如下
MainID F1 F2 F3
1 1 1 1
2 2 2 2
3 3 3 3
4 4 4 4
注意到,我先把数据从数据库中读出来,赋值到DS中
结果显然为4行
然后我在该数据集DS中添加2个同构行
这是注意了,我没有做任何的Insert相关语句
打算直接采用SqlDataAdapter.Update(DataSet,TableScr)方法
但是注意,直接用是不行的,会提示缺少Insert命令的关联
这是可以用了如黄色高亮标记的语句
SqlCommandBuilder SCB=new SqlCommandBuilder(Sda);
这是所有关联就都建立好了,全自动。奇妙,诡异阿
这样就方便多了。
恩,更多的相关功能正在研究中。
=============================================================
使用SqlCommandBuilder与SqlDataAdapter结合使用,可以方便地去数据库进行更新。只要指定Select 语句就可以自动生成Insert,update,delete语句,但要注意一点。Select 语句中返回的列要包括主键列,否则将无法产生Update,和Delete语句。相应的操作将无法执行
public static DataSet SelectSqlSrvRows(string myConnection, string mySelectQuery, string myTableName)
{
SqlConnection myConn = new SqlConnection(myConnection);
SqlDataAdapter myDataAdapter = new SqlDataAdapter();
myDataAdapter.SelectCommand = new SqlCommand(mySelectQuery, myConn);
SqlCommandBuilder cb = new SqlCommandBuilder(myDataAdapter);
myConn.Open();
DataSet ds = new DataSet();
myDataAdapter.Fill(ds, myTableName);
//code to modify data in DataSet here
//Without the SqlCommandBuilder this line would fail
myDataAdapter.Update(ds, myTableName);
myConn.Close();
return ds;
}
SqlCommandBuilder的作用的更多相关文章
- SqlCommandBuilder的讨论
之前也看过别人的解释,总感觉解释的不太理想,当然我自己的解释我尽量解释理想点,SqlCommandBuilder 是提供给外界对数据库的反操作的,如果只是对数据库的一个提取的话,那么用下面的代码足以 ...
- ADO.NET 学习笔记 入门教程
本文转载自:http://www.youarebug.com/forum.php?mod=viewthread&tid=57&page=1&extra=#pid63 这是本人在 ...
- 用SqlCommandBuilder 实现批量更新
一般是这样的,如果用设计器将SqlDataAdapter拖到页面中使用时,不会出现SqlDataAdapter.Update(ds)更新时出错情况,因为系统会自动生成SqlDataAdapter的属性 ...
- if __name__== "__main__" 的意思(作用)python代码复用
if __name__== "__main__" 的意思(作用)python代码复用 转自:大步's Blog http://www.dabu.info/if-__-name__ ...
- (转载)linux下各个文件夹的作用
linux下的文件结构,看看每个文件夹都是干吗用的/bin 二进制可执行命令 /dev 设备特殊文件 /etc 系统管理和配置文件 /etc/rc.d 启动的配置文件和脚本 /home 用户主目录的基 ...
- github中的watch、star、fork的作用
[转自:http://www.jianshu.com/p/6c366b53ea41] 在每个 github 项目的右上角,都有三个按钮,分别是 watch.star.fork,但是有些刚开始使用 gi ...
- web.xml中welcome-file-list的作用
今天尝试使用struts2+ urlrewrite+sitemesh部署项目,结果发现welcome-file-list中定义的欢迎页不起作用: <welcome-file-list> & ...
- web.xml中load-on-startup的作用
如下一段配置,熟悉DWR的再熟悉不过了:<servlet> <servlet-name>dwr-invoker</servlet-name> <ser ...
- SQLSERVER中NULL位图的作用
SQLSERVER中NULL位图的作用 首先感谢宋沄剑提供的文章和sqlskill网站:www.sqlskills.com,看下面文章之前请先看一下下面两篇文章 SQL Server误区30日谈-Da ...
随机推荐
- 《深入理解Spark-核心思想与源码分析》(四)第四章存储体系
天行健,君子以自强不息:地势坤,君子以厚德载物.——<易经> 本章导读 Spark的初始化阶段.任务提交阶段.执行阶段,始终离不开存储体系. Spark为了避免Hadoop读写磁盘的I/O ...
- Java如何判断线程池所有任务是否执行完毕
import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; public class Tes ...
- C语言中的位域、字节序、比特序、大小端
转:http://www.360doc.com/content/13/0624/10/496343_295125641.shtml 1.比特序 / 位序 / bit numbering / bit ...
- 解决delphi10.2.3 android tools闪退
解决delphi10.2.3 android tools闪退 修改D:\Program Files (x86)\Embarcadero\Studio\19.0\PlatformSDKs\android ...
- sql 查询慢的48个原因分析
sql 查询慢的48个原因分析. server memory 服务器配置选项配置为物理内存的 1.5 倍(虚拟内存大小设置的一半). 字句同时执行,SQL SERVER根据系统的负载情况决定最优的 ...
- python笔记15-ini配置文件(configparser)
前言 使用配置文件来灵活的配置一些参数是一件很常见的事情,配置文件的解析并不复杂,在python里更是如此,在官方发布的库中就包含有做这件事情的库,那就是configParser configPars ...
- UIButton中的三个UIEdgeInsets属性
接着昨天的 UIButton中的三个UIEdgeInsets属性 ,今天我们具体谈谈UIButton的contentEdgeInsets.titleEdgeInsets.imageEdgeInsets ...
- Netty游戏服务器之六服务端登录消息处理
客户端unity3d已经把消息发送到netty服务器上了,那么ServerHandler类的public void channelRead(ChannelHandlerContext ctx, Obj ...
- 18.并发类容器MQ
package demo7.MQ; public class QueueData { private int id; private String name; private String taskC ...
- 15.同步类容器Vector
同步类容器1 1.线程都是安全的. 2.在某些场景下需要加锁来保护“复合操作” a.迭代:反复去访问元素.遍历完容器所有的元素 b.跳转:根据下标制定去访问查找元素 c.条件运算 3.复合操作在多线程 ...