• 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;

    }

  • 相关阅读:
    梦断代码阅读笔记03
    梦断代码阅读笔记01
    构建之法阅读笔记03
    《构建之法——现代软件工程》读书笔记(一)
    构建之法阅读笔记02
    TypeError: only integer scalar arrays can be converted to a scalar index
    LeetCode Easy: 33. Search in Rotated Sorted Array
    LeetCode Medium: 31. Next Permutation
    LeetCode Medium: 29. Divide Two Integers
    python中merge、concat用法
  • 原文地址:https://www.cnblogs.com/wl-blog/p/13183926.html
Copyright © 2020-2023  润新知