最近看一个案例,关于如何向数据库传数据,颇有发现。

以前我的数据都是采用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的作用的更多相关文章

  1. SqlCommandBuilder的讨论

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

  2. ADO.NET 学习笔记 入门教程

    本文转载自:http://www.youarebug.com/forum.php?mod=viewthread&tid=57&page=1&extra=#pid63 这是本人在 ...

  3. 用SqlCommandBuilder 实现批量更新

    一般是这样的,如果用设计器将SqlDataAdapter拖到页面中使用时,不会出现SqlDataAdapter.Update(ds)更新时出错情况,因为系统会自动生成SqlDataAdapter的属性 ...

  4. if __name__== "__main__" 的意思(作用)python代码复用

    if __name__== "__main__" 的意思(作用)python代码复用 转自:大步's Blog  http://www.dabu.info/if-__-name__ ...

  5. (转载)linux下各个文件夹的作用

    linux下的文件结构,看看每个文件夹都是干吗用的/bin 二进制可执行命令 /dev 设备特殊文件 /etc 系统管理和配置文件 /etc/rc.d 启动的配置文件和脚本 /home 用户主目录的基 ...

  6. github中的watch、star、fork的作用

    [转自:http://www.jianshu.com/p/6c366b53ea41] 在每个 github 项目的右上角,都有三个按钮,分别是 watch.star.fork,但是有些刚开始使用 gi ...

  7. web.xml中welcome-file-list的作用

    今天尝试使用struts2+ urlrewrite+sitemesh部署项目,结果发现welcome-file-list中定义的欢迎页不起作用: <welcome-file-list> & ...

  8. web.xml中load-on-startup的作用

    如下一段配置,熟悉DWR的再熟悉不过了:<servlet>   <servlet-name>dwr-invoker</servlet-name>   <ser ...

  9. SQLSERVER中NULL位图的作用

    SQLSERVER中NULL位图的作用 首先感谢宋沄剑提供的文章和sqlskill网站:www.sqlskills.com,看下面文章之前请先看一下下面两篇文章 SQL Server误区30日谈-Da ...

随机推荐

  1. kong添加upstream

    整理的文档比较早,kong版本可能是0.10.3版本.详情请看官网最新文档 准备 使用kong代理后端请求 1.开放几个接口如下: 本地请求1:http://aaa.wyc.com:8888/aaa ...

  2. Problem D: 零起点学算法95——弓型矩阵

    #include<stdio.h> #include<string.h> int main() { ][]; while(scanf("%d%d",& ...

  3. Ubuntu 16.04搭建原始Git服务器

    说明:不要把有限的生命浪费到权限斗争中! 1.安装SSH sudo apt-get install openssh-server sudo service ssh start 2.安装Git sudo ...

  4. 判断 Selite中标存在或者字段存在的方法

    判断表存在的方法很简单,网上很多: SELECT COUNT(*) FROM sqlite_master where type='table' and name='%s'" % tname; ...

  5. Fork & vfork & clone (转载)

    转自:http://blog.csdn.net/zqy2000zqy/archive/2006/09/04/1176924.aspx 进程是一个指令执行流及其执行环境,其执行环境是一个系统资源的集合, ...

  6. linux 端口占用查看 netstat -tunpl | grep 6379

    端口占用查看 netstat -tunpl | grep 6379 netstat -luntpu|grep fdfs

  7. Quartz_TimeJob例子(C#)

    执行入口: using System; using System.Collections.Generic; using log4net; using Quartz; using ypt_base.Co ...

  8. [Android Pro] Android学习——在线查看android源代码的3种方式

    原文:http://blog.csdn.net/chuekup/article/details/8067075 1. https://github.com/android 2. http://grep ...

  9. Linux/Unix C编程之的perror函数,strerror函数,errno

    #include <stdio.h> // void perror(const char *msg); #include <string.h> // char *strerro ...

  10. Bootstrap导航栏实例讲解

    导航栏是一个很好的功能,是 Bootstrap 网站的一个突出特点.导航栏是响应式元组件就,作为应用程序或网站的导航标题.导航栏在移动设备的视图中是折叠的,随着可用视口宽度的增加,导航栏也会水平展开. ...