SqlDataAdapter对象

一、特点介绍
1、表示用于填充 DataSet 和更新 SQL Server 数据库的一组数据命令和一个数据库连接。
2、在SqlDataAdapter和DataSet之间没有直接连接。当完成SqlDataAdpater.Fill(DataSet)调用后,两个对象之间就没有连接了。
二、使用介绍
1、创建SqlDataAdapter
    string strSQL=“Select * from Customers”;
    SqlCommand cmd=new SqlCommand(strSQL,cn);
    SqlDataAdapter da=new SqlDataAdapter();
    da.SelectCommand=cmd;
2、SqlDataAdapter构造函数
①stringstrConn=“Provider=.....”;
  string strSQL=“select * from Customers”;
  SqlDataAdapter da=new SqlDataAdapter(strSQL,strConn);
②stringstrConn=“Provider=.....”;
  SqlConnection cn=new SqlConnection(strConn);
  SqlDataAdapter da=new SqlDataAdapter(“select * from Customers”,cn);
③stringstrConn=“Provider=.....”;
  string strSQL=“select * from Customers”;
  SqlConnection cn=new SqlConnection(strConn);
  SqlCommand cmd=new SqlCommand(strSQL,cn);
  SqlDataAdapter da=new SqlDataAdapter(cmd);
3、从查询中获取结果
①使用Fill方法
    SqlDataAdapter da=new SqlDataAdapter(strSQL,strConn);
    DataSet ds=new DataSet();
    da.Fill(ds);   //这里ds中的表名为Table
②使用Fill方法创建DataTable对象和DataColumn对象
    SqlDataAdapter da=new SqlDataAdapter(strSQL,strConn);
    da.TableMapping.Add(“Table”,“Customers”);    
    DataSet ds=new DataSet();
    da.Fill(ds);
③使用重载Fill方法
    SqlDataAdapter.Fill(DataSet,“Customers”);
    SqlDataAdapter.Fill(DataTable);
   SqlDataAdapter.Fill(DataSet,intStartRecord,intNumRecords,“TableName”);
④开放和关闭连接
    如果调用了一个SqlDataAdapter对象的Fill方法,而SelectCommand属性的Connection关闭了,那么SqlDataAdapter就会开放一个连接,然后提交查询、获取结果、最后关闭连接。如果在调用前开放了Connection,那么操作之后仍然保持开放。
    SqlDataAdapter daCustomers,daOrders;
    daCustomers=new SqlDataAdapter(“Select * fromCustomers”,cn);
    daOrders=new SqlDataAdapter(“Select * from Orders”,cn);
    DataSet ds=new DataSet();
    cn.Open();
    daCustomers.Fill(ds);
    daOrders.Fill(ds);
    cn.Close();
⑤多次调用Fill方法
    刷新DataSet中的数据,最简单的解决方法就是清空DataSet(或DataTable),然后再次调用DataAdapter对象的Fill方法。    
三、属性方法事件介绍 
1、属性
①AcceptChangeDuringFill:确定由DataAdapter所获取的行的RowState(默认为True)。
②DeleteCommand:获取或设置一个 Transact-SQL 语句或存储过程,以从数据集删除记录。
③InsertCommand:获取或设置一个 Transact-SQL 语句或存储过程,以在数据源中插入新记录。
④SelectCommand:获取或设置一个 Transact-SQL 语句或存储过程,用于在数据源中选择记录。
⑤UpdateCommand:获取或设置一个 Transact-SQL 语句或存储过程,用于更新数据源中的记录。
⑥TableMappings:SqlDataAdapter用来将查询的结果映射到DataSet的信息集合。
⑦ContinueUpdate:控制SqlDataAdapter在遇到一个错误之后是否继续提交更改(默认为false)。
2、方法
①Fill:执行存储于SelectCommand中的查询,并将结果存储在DataTable中。
②FillSchema:为存储在SelectCommand中存储的查询获取架构信息。获取查询中的各列名称和数据类型。
③GetFillParameters:为SelectCommand获取一个包含着参数的数组。
④Update:向数据库提交存储在DataSet(或DataTable、DataRows)中的更改。该方法会返回一个整数值,其中包含着在数据存储中成功更新的行数。
3、事件
①FillError:当DataAdapter遇到填充DataSet或DataTable的一个错误时,该事件被触发。
②RowUpdated:向数据库提交一个修改的行之后被触发。
③RowUpdating:向数据库提交一个修改的行之前被触发。

SqlCommand对象

介绍
SqlCommand对象允许你指定在数据库上执行的操作的类型。比如,你能够对数据库中的行数据执行select,insert,modify以及delete命令。SqlCommand对象能被用来支持断开连接数据管理的情况,但是在这节课我们将只单独使用SqlCommand对象。后面关于SqlDataAdapter的课程将解释如何使用断开数据实现应用程序。这节课将同时展示如何从数据库中返回一个单独的值,比如表中记录的数量。
创建SqlCommand对象
SqlCommand cmd = new SqlCommand("select CategoryName fromCategories", conn);
上面一行是典型的实例化SqlCommand对象的代码。它使用一个string参数来保存你想要执行的命令以及一个关于SqlConnection对象的引用。SqlCommand具有重载形式,这些形式你将在以后的示例中看到。
查询数据
当使用SQL的select命令,会得到一组数据集。为了和SqlCommand对象配合使用,你应该使用ExecuteReader方法,它返回一个SqlDataReader对象。我们将在后面的内容讨论SqlDataReader。下面的例子显示了如何使用SqlCommand对象来得到SqlDataReader对象:
// 1. Instantiate a new command with a query and connection
SqlCommand cmd = new SqlCommand("select CategoryName fromCategories", conn);
// 2. Call Execute reader to get query results
SqlDataReader rdr = cmd.ExecuteReader();
在上面的示例中,我们通过传递命令字符串核连接对象到构造函数的方式实体化了SqlCommand对象。然后我们通过SqlCommand对象cmd调用ExecuteReader方法得到了SqlDataReader对象。
这些代码是表1中ReadData方法的一部分,我们将在后面集中介绍。
插入数据
要对数据库插入数据,使用SqlCommand对象的ExecuteNonQuery方法。下面的代码显示了如何向数据库表插入数据: 
string insertString = @"insert into Categories(CategoryName,Description)values ('Miscellaneous', 'Whatever doesn''t fit elsewhere')";
SqlCommand cmd = new SqlCommand(insertString, conn);
cmd.ExecuteNonQuery();
SqlCommand的实例化过程与以前看到的有一些区别,但是基本一致。在构造函数的第一个字符串参数中是用的是插入字符串变量而不三字符串字面值。该变量在SqlCommand声明之前被声明了。
注意在insertString文本中“doesn’’t”的两个单引号(’’)。这是将它转义为适当的单引号。
另外一个需要注意的是我们显式指明了列:CategoryName和Description。列表中有一个主键名为CategoryID。我们忽略这列因为SQL Server将自动添加此字段。试图对主键比如CategoryID添加值会产生异常。
为了执行此命令,我们简单的对SqlCommand实体cmd调用ExecuteNonQuery方法。
这段代码是表1中InsertData方法的一部分,我们将在后面集中介绍。
更新数据
ExecuteNonQuery方法同样用来更新数据。下面的代码显示了如何更新数据:
string updateString = @"update Categories set CategoryName = 'Other'
  where CategoryName = 'Miscellaneous'";
SqlCommand cmd = new SqlCommand(updateString);
cmd.Connection = conn;
cmd.ExecuteNonQuery();
删除数据
你同样能够使用ExecuteNonQuery方法删除数据。下面的例子说明了如何使用EXecuteNonQuery方法删除数据库中的记录。 
string deleteString = @"delete from Categories where CategoryName ='Other'";
SqlCommand cmd = new SqlCommand();
cmd.CommandText = deleteString;
cmd.Connection = conn;
cmd.ExecuteNonQuery();
这个示例使用了没有参数的SqlCommand构造函数。取而代之的是显式地设置了CommandText和SqlCommand对象的连接属性。
我们同样能够使用SqlCommand构造函数在前面的两个重载形式——用来插入或者更新命令——得到相同的结果。它说明了在任何时候既能够改变命令文本又能够改变连接对象。
ExecuteNonQuery方法调用将命令传递给数据库。
得到单一值
某些时候你想从数据库中只取一个值,它可能是关于数据集的计数、和、平均值或者其他聚合数值。使用ExecuteReader方法并计算代码中的结果并不是做这些事情的有效方式。最好的选择就是让数据库能够执行并且只返回你所需要的单独的值。下面的示例说明了如何使用ExecuteScalar方法来实现:
SqlCommand cmd = new SqlCommand("select count(*) from Categories",conn);
  int count = (int)cmd.ExecuteScalar(); 
总结
SqlCommand对象允许你擦许并对数据库传送命令。它含有针对不同的命令而特定的方法。ExecuteReader方法返回SqlDataReader对象来现实查询的结果。对于insert,update以及delete这些SQL命令,使用ExecuteNonQuery方法。如果你只需要查询的单独聚集值,ExecuteScalar方法是最好的选择

SqlDataAdapter和SqlCommand对比分析

一、SqlDataAdapter和DateSet

原理:DateSet是数据的内存驻留表示形式,它提供了独立于数据源的一致关系编程模型;从某种程度上说DateSet就是一个不可视的数据库。但真正与数据源打交道的是SqlDataAdapter,包括从数据源填充数据集和从数据集更新数据源。SqlDataAdapter使用Fill()方法将检索的数据填充到 DateSet。

流程:IE——GridView——DataSet——SqlDataAdapter——SQL数据库

public void BindGrid()

{

SqlDataAdapter myAdp = new SqlDataAdapter("select * fromUserAdmin order by UserId desc", conn);

DataSet ds = new DataSet();

myAdp.Fill(ds, "Authors");

//Label1.Text = ds.Tables[0].Rows.Count.ToString(); //得到共有多少条记录;

GridView1.DataSource =ds.Tables["Authors"].DefaultView;

GridView1.DataBind();

}

二、SqlCommand和SqlDataReade

原理:SqlCommand通过ExecuteReader()方法将得到的数据给SqlDataReade对象。

SqlDataReade逐行将从数据源获得的数据放进缓冲区进行处理。

优点:SqlDataReade执行速度快,提高应用程序性能。

优点原因:一旦数据可用,SqlDataReade就会立即检索该数据,而不是等待返回查询的全部结果;默认情况下,一次只在缓冲区存储一行,从而降低系统开销。

缺点:使用不灵活。

流程:IE——SqlDataReade——SqlCommand——SQL数据库

注:每次使用完SqlDataReade对象后一定要调用Close()方法将其关闭。因为SqlDataReade对象以独占的方式使用Connection。

例:

SqlCommand myconn = new SqlCommand("select * fromv_economy2_comidd where eid=" + Request.QueryString["eid"] +"", conn);

conn.Open();

SqlDataReader rd = myconn.ExecuteReader();

rd.Read();

Lbyear1.Text = rd["year1"].ToString();

Lbmonth1.Text = rd["month1"].ToString();

Lbcom_name.Text = rd["com_name"].ToString();

rd.Close();

conn.Close();

区别在于:
SqlDataAdapter:
用于填充 DataSet 和更新 SQL 数据库的“一组”数据命令和“一个”数据库连接。
SqlDataAdapter不但可以操作多个SQL命令,而且还可以操作一个SQL命令

DataSet是关系型数据库的抽象,ADO.NET使用DataAdapter(意为数据适配器)作为dataset和数据源之间的桥梁;DataAdapter 提供了Fill()方法从数据库中获取数据并生成DataSet。
SqlCommand:
对 SQL 数据库执行的“一个”SQL语句或存储过程。
SqlCommand只能操作一个SQL命令

个人觉得SqlCommand用来更新少量数据时比较合适,速度快,使用方便。他是执行sql语句查询的。
SqlDataAdapter用于把数据放到DataSet中,集中修改、删除后,通过Update把整个DataSet再提交回给数据库进行处理

SqlCommand和SqlDataAdapter的区别的更多相关文章

  1. C# SqlCommand和SqlDataAdapter的区别

    SqlCommand和SqlDataAdapter的区别 SqlCommand对应DateReader   SqlDataAdapter对应DataSet   SqlCommand的执行效率比较高,但 ...

  2. SqlCommand和SqlDataAdapter有什么区别

    因为DataSet是离线的,所以SqlDataAdapter这个对象是连接DataSet和数据库的桥梁,所有对DataSet的操作(填充,更新等)都要通过他 ado.net数据访问有两种方式: 1.离 ...

  3. C#中ExecuteReader、ExecuteNonQuery、ExecuteScalar、SqlDataReader、SqlDataAdapter的区别

    ExecuteNonQuery()执行命令对象的SQL语句,返回一个int 类型的变量,返回数据库操作之后影响的行数.适合用来验证对数据库进行增删改的情况. 2.ExecuteScalar()也可以执 ...

  4. ADO.NET基础知识学习(SQLCOnnection&SQLCommand&SQLDataReader&SQLDataAdapter&DataSet)

    通过ADO.NET技术,我们可以高效的完成客户端同数据库之间的数据访问操作,便于我们在客户端程序简便高效的访问以及获取数据库中的有用数据,同时也可以对数据库中的数据进行更新,即可以完成客户端与数据库之 ...

  5. 调用SqlCommand或SqlDataAdapter的Dispose方法,是否会关闭绑定的SqlConnection?(转载)

    1. Does SqlCommand.Dispose close the connection? 问 Can I use this approach efficiently? using(SqlCom ...

  6. C# ADO.NET编写简单的图书馆管理软件

    使用软件: Microsoft SQL Server 2012 Microsoft Visual Studio 2012 本文地址: http://www.cnblogs.com/go2bed/ 参考 ...

  7. ADO.NET连接方式

    使用Command.DataReader和DataSet两种方法实现数据绑定 方法1:使用Command和DataReader SqlConnection con = new SqlConnectio ...

  8. 数据库之SqlDataAdapter

    SqlDataAdapter 类 表示用于填充 DataSet 和更新 SQL Server 数据库的一组数据命令和一个数据库连接.无法继承此类. 命名空间:System.Data.SqlClient ...

  9. SqlDataAdapter 用法详解

    SqlCommand是sql命令,执行后通过sqlDataAdapter返回填入DataSet SqlDataAdapter   有不同的构造函数, SqlDataAdapter(SqlCommand ...

随机推荐

  1. redis之RDB持久化与AOF持久化

    Redis是一个键值对数据库服务器,服务器中通常包含着任意个非空数据库,而每个非空数据库中又可以包含任意个键值对,为了方便起见,我们将服务器中的非空数据库以及它们的键值对统称为数据库状态. 因为Red ...

  2. Linux_free(buffer与cache区别)

    一.free命令[root@xen_202_12 /]# free -m             total       used       free     shared    buffers   ...

  3. git 拉取某个分支到本地

    git 拉取其实只需要 git fetch origin xxx. git pull origin xxx即可

  4. MongoDB 数据库命令

    数据库命令 连接成功后,默认使用test数据库 查看当前数据库名称 db 查看所有数据库名称,列出所有在物理上存在的数据库 show dbs 切换数据库,如果数据库不存在也并不创建,直到插入数据或创建 ...

  5. proc

    1. /proc 下文件的内容是动态创建的,当文件可写时可用作控制和配置目的. 2. 在某个进程读取 /proc 文件时,内核会分配一个内存页,驱动程序通过这个内存页将数据返回到用户空间 (read( ...

  6. Extending Conductor

    后端 导体提供了可插拔的后端.目前的实现使用Dynomite. 每个后端需要实现4个接口: //Store for workflow and task definitions com.netflix. ...

  7. Electron Browser加载iframe(webview src属性)

    browser或者webcontents 的高度与宽度比例对webview中src的页面结构也是有一定影响的

  8. dubbo-admin 管理平台

    一.前言 dubbo的使用,其实只需要有注册中心,消费者,提供者这三个就可以使用了,但是并不能看到有哪些消费者和提供者,为了更好的调试,发现问题,解决问题,因此引入dubbo-admin.通过dubb ...

  9. suse11 sp4(虚拟机) 能ping通主机,但是主机ping不通suse虚拟机

    sese的防火墙没关. 查看防火墙状态: rcSuSEfirewall2 status(必须是root账户,sudo都不行) 关闭防火墙:rcSuSEfirewall2 stop 事实上,防火墙有时候 ...

  10. Writing A Better JavaScript Library For The DOM 阅读记录

    原文地址:http://coding.smashingmagazine.com/2014/01/13/better-javascript-library-for-the-dom/ 主要观点: live ...