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;

}

时间: 2024-10-13 21:55:01

SqlCommandBuilder的作用的相关文章

ADO.NET 学习笔记 入门教程

本文转载自:http://www.youarebug.com/forum.php?mod=viewthread&tid=57&page=1&extra=#pid63 这是本人在学习ADP.NET过程中所作的笔记,可作为ADO.NET入门或者复习的教程. 连接字符串: DataSource=localhost; AttchDBFilename=|DataDirectory|\Database1.mdf; InitialCatalog=UserDate; Integrated Secu

用SqlCommandBuilder 实现批量更新

一般是这样的,如果用设计器将SqlDataAdapter拖到页面中使用时,不会出现SqlDataAdapter.Update(ds)更新时出错情况,因为系统会自动生成SqlDataAdapter的属性命令,比如:  .UpdateCommane insertCommand selectCommand等.  但是有些程序员不喜欢用设计器,或者是有些地方没必要拖动SqlDataAdapter这么个庞大物来实现,那么SqlDataAdapter就不会自动生成相关的查询或更新语句了.   所以当执行到S

SqlCommandBuilder的讨论

之前也看过别人的解释,总感觉解释的不太理想,当然我自己的解释我尽量解释理想点,SqlCommandBuilder 是提供给外界对数据库的反操作的,如果只是对数据库的一个提取的话,那么用下面的代码足以 public DataSet getDataset(string sqlstr) { Conn.Open(); SqlDataAdapter da = new SqlDataAdapter(sqlstr,Conn); DataSet ds = new DataSet(); da.Fill(ds);

@jsonignore的作用

作用是json序列化时将java bean中的一些属性忽略掉,序列化和反序列化都受影响. 如下: package com.hzboy.orm; import java.util.List; import javax.persistence.CascadeType; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.FetchType; import javax.pe

配置虚拟域名,hosts文件起作用

快速打开hosts方法 开始->运行->system32->回车 当前路径文件夹drivers\etc\hosts hosts文件起作用,目前楼主知道有两个可能原因 1.刷新dns cmd里面运行 ipconfig /flushdns 2.没配置前访问了一次域名,配置完之后浏览器没重启.所以不起作用 重新启动浏览器或者换一个浏览器

Linux中的环境变量配置文件及其作用

登录相关的配置文件: /etc/profile 范围:对所有用户生效 作用: a.定义USER变量 b.定义LOGNAME变量 c.定义MAIL变量 d.定义PATH变量 e.定义HOSTNAME变量 f.定义HISTSIZE变量 g.定义umask值 i.调用/etc/profile.d/*.sh文件 /etc/profile.d/*.sh 范围:对所有用户生效 说明:这是一族sh文件,没个都会被调用 例如: /etc/profile.d/lang.sh 作用:调用/etc/sysconfg/

表单的作用

①input的作用分为:单选按钮.文本框.密码框.复选按钮.隐藏表单域.文本选择框.图片按钮.普通按钮.提交按钮.重置按钮 ②select的作用:可创建单选或多选菜单,含有<option>标签 在HTML5中的新属性:1.autofocus属性            值autofocus                     规定在页面加载后文本区域自动获得焦点: 2.disabled                        disabled                      

shell中各种括号的作用

小括号里是命令大括号是变量值   一.小括号,圆括号() 1.单小括号 () ①命令组.括号中的命令将会新开一个子shell顺序执行,所以括号中的变量不能够被脚本余下的部分使用.括号中多个命令之间用分号隔开,最后一个命令可以没有分号,各命令和括号之间不必有空格. ②命令替换.等同于`cmd`,shell扫描一遍命令行,发现了$(cmd)结构,便将$(cmd)中的cmd执行一次,得到其标准输出,再将此输出放到原来命令.有些shell不支持,如tcsh. ③用于初始化数组.如:array=(a b

VMware Tools的安装及其作用(redhat5.5为例)

VMware Tools是VMware虚拟机中自带的一种增强工具,相当于VirtualBox中的增强功能(Sun VirtualBox Guest Additions),是VMware提供的增强虚拟显卡和硬盘性能.以及同步虚拟机与主机时钟的驱动程序. 只有在VMware虚拟机中安装好了VMware Tools,才能实现主机与虚拟机之间的文件共享,同时可支持自由拖拽的功能,鼠标也可在虚拟机与主机之前自由移动(不用再按ctrl+alt),且虚拟机屏幕也可实现全屏化. 在vm上安装完redhat系统后