zoukankan      html  css  js  c++  java
  • 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;

    }

  • 相关阅读:
    Software Solutions CACHE COHERENCE AND THE MESI PROTOCOL
    CACHE COHERENCE AND THE MESI PROTOCOL
    Multiprocessor Operating System Design Considerations SYMMETRIC MULTIPROCESSORS
    Organization SYMMETRIC MULTIPROCESSORS
    PARALLEL PROCESSING
    1分钟内发送差评邮件
    Secure Digital
    SYMMETRIC MULTIPROCESSORS
    A Taxonomy of Parallel Processor Architectures
    parallelism
  • 原文地址:https://www.cnblogs.com/wl-blog/p/13183926.html
Copyright © 2011-2022 走看看