zoukankan      html  css  js  c++  java
  • SqlDataAdapter概述

    SqlDataAdapter是 DataSet和 SQL Server之间的桥接器,用于检索和保存数据。SqlDataAdapter通过对数据源使用适当的Transact-SQL语句映射 Fill(它可更改DataSet中的数据以匹配数据源中的数据)和 Update(它可更改数据源中的数据以匹配 DataSet中的数据)来提供这一桥接。当SqlDataAdapter填充 DataSet时,它为返回的数据创建必需的表和列(如果这些表和列尚不存在)。

    使用方法

    1、通过连接字符串和查询语句 

    string strConn="uid=账号;pwd=密码;database=数据库;server=服务器";//SQL Server链接字符串
    strSql="SELECT * FROM 表名";
     
    SqlDataAdapter da=new SqlDataAdapter(strSql,strConn);
    DataSet ds=new DataSet();//创建DataSet实例
    da.Fill(ds,"自定义虚拟表名");//使用DataAdapter的Fill方法(填充),调用SELECT命令
    

    2、通过查询语句和SqlConnection对象来创建

    string strConn="uid=账号;pwd=密码;database=数据库;server=服务器";//SQL Server链接字符串  
    SqlConnection conn=new SqlConnection(strConn);  
    string strSql="SELECT * FROM 表名";  
    SqlDataAdapter da = new SqlDataAdapter(strSql, conn);  
    DataSet ds=new DataSet();//创建DataSet实例  
    da.Fill(ds,"自定义虚拟表名");//使用DataAdapter的Fill方法(填充),调用SELECT命令  
    

     3、通过SqlCommand对象来创建

    string strConn="uid=账号;pwd=密码;database=数据库;server=服务器";//SQL Server链接字符串    
    SqlConnection connSql=new SqlConnection (strConn); //Sql链接类的实例化    
    connSql.Open ();//打开数据库    
    //使用SqlDataAdapter时没有必要从Connection.open()打开,    
    //SqlDataAdapter会自动打开关闭它。    
    string strSql = "SELECT * FROM 表名"; //要执行的SQL语句    
    SqlCommand cmd = new SqlCommand(strSql, connSql);  
    SqlDataAdapter da=new SqlDataAdapter(cmd); //创建DataAdapter数据适配器实例    
    DataSet ds=new DataSet();//创建DataSet实例    
    da.Fill(ds,"自定义虚拟表名");//使用DataAdapter的Fill方法(填充),调用SELECT命令    
    connSql.Close();//关闭数据库 
    

     注意

    如果只需要执行SQL语句或SP,就没必要用到DataAdapter ,直接用SqlCommandExecute系列方法就可以了。sqlDataadapter的作用是实现DatasetDB之间的桥梁:比如将对DataSet的修改更新到数据库

    SqlDataAdapterUpdateCommand的执行机制是:当调用SqlDataAdapter.Update()时,检查DataSet中的所有行,然后对每一个修改过的Row执行SqlDataAdapter.UpdateCommand ,也就是说如果未修改DataSet中的数据,SqlDataAdapter.UpdateCommand不会执行。

     

    1、在使用Fill方式时,可以指定DataTable,而不是DataSet

     

     

    string strConn="uid=账号;pwd=密码;database=数据库;server=服务器";//SQL Server链接字符串    
    strSql="SELECT * FROM 表名";    
       
    SqlDataAdapter da = new SqlDataAdapter(strSql, strConn);  
    DataTable tbl=new DataTable( );  
    da.Fill(tbl); 
    

     

     2、注意打开和关闭连接的处理

    在调用SqlCommand对象执行sql命令之前,需要保证与该对象关联的SqlConnection对象是打开的,否则SqlCommand的方法执行时将引发一个异常,但是我们在上面的代码中看到,SqlDataAdapter没有这样的要求。

     

    如果调用SqlDataAdapterFill方法,并且其SelectCommand属性的SqlConnection是关闭状态,则SqlDataAdapter会自动打开它,然后提交查询,获取结果,最后关闭连接。如果在调用Fill方法前,SqlConnection是打开的,则查询执行完毕后,SqlConnection还将是打开的,也就是说SqlDataAdapter会保证SqlConnection的状态恢复到原来的情形

     

    string strConn="uid=账号;pwd=密码;database=数据库;server=服务器";//SQL Server链接字符串    
    SqlConnection conn=new SqlConnection(strConn);  
    SqlDataAdapter daCustomers,daOrders;  
       
    strSql="SELECT * FROM Customers";  
    daCustomers = new SqlDataAdapter(strSql, conn);  
       
    strSql="SELECT * FROM Orders";  
    daOrders=new SqlDataAdapter(strSql, conn);  
      
    DataSet ds=new DataSet();  
       
    daCustomers.Fill(ds,"Customers");  
    daOrders.Fill(ds,"Orders"); 
    

     

     以上代码会导致连接被打开和关闭两次,在调用Fill方法时各一次。为了避免打开和关闭SqlConnection对象,在调用SqlDataAdapter对象的Fill方法之前,我们可以先打开SqlConnection对象,如果希望之后关闭连接,我们可以再调用Close方法,就像这样:

    conn.Open()  
    strSql="SELECT * FROM Customers";  
    daCustomers = new SqlDataAdapter(strSql, conn);  
       
    strSql="SELECT * FROM Orders";  
    daOrders=new SqlDataAdapter(strSql, conn);  
      
    DataSet ds=new DataSet();  
       
    daCustomers.Fill(ds,"Customers");  
    daOrders.Fill(ds,"Orders"); 
    conn.Close();
    

    3、多次调用Fill方法需要注意数据重复和有效更新数据的问题

    推荐的做法是,在调用Fill方法前,先删除本地DataSet中缓存的数据!

     

  • 相关阅读:
    数据结构-向量
    可信执行环境(TEE)介绍 与应用
    ACM
    带哨兵节点和不带哨兵节点的单链表操作的对比
    java:Conllection(List,set,get,map,subList)使用
    java:在Conllection接口中实际上也规定了两个可以将集合变成对象数组的操作
    java:Conllection中的List,ArrayList添加元素,删除元素,输出元素
    java:类集框架conllection接口list,set
    java:投个票程序
    git:Git fetch和git pull的区别, 解决Git报错:error: You have not concluded your merge (MERGE_HEAD exists).
  • 原文地址:https://www.cnblogs.com/rosesmall/p/8567732.html
Copyright © 2011-2022 走看看