dataadapter,C#编程:DataAdapter的fill方法的参数到底有几个?有四个的情况吗?
dataadapter,C#编程:DataAdapter的fill方法的参数到底有几个?有四个的情况吗?详细介绍
本文目录一览: DataAdapter 是什么意思啊 应该怎样用啊???有什么作用啊???
是为表取的名字.一般意义上,当你使用fill填充后,就可以使用dataset.tables[0]这样的形式来访问其中的数据表,而如果使用你题目中的fill重载,就可以使用dataset.tables["personinfo"]来访问数据表。
数据适配器,应该是数据线的转换器
DataAdapter读取数据
数据适配器
DataAdapter 用作 DataSet 和数据源之间的桥接器以便检索和保存数据。DataAdapter 通过映射 Fill(这更改了 DataSet 中的数据以便与数据源中的数据相匹配)和 Update(这更改了数据源中的数据以便与 DataSet 中的数据相匹配)来提供这一桥接器。
如果所连接的是 SQL Server 数据库,则可以通过将 SqlDataAdapter 与关联的 SqlCommand 和 SqlConnection 对象一起使用,从而提高总体性能。对于支持 OLE DB 的数据源,请使用 DataAdapter 及其关联的 OleDbCommand 和 OleDbConnection 对象。对于支持 ODBC 的数据源,请使用 DataAdapter 及其关联的 OdbcCommand 和 OdbcConnection 对象。对于 Oracle 数据库,请使用 DataAdapter 及其关联的 OracleCommand 和 OracleConnection 对象。
当创建 DataAdapter 的实例时,读/写属性将被设置为初始值。有关这些值的列表,请参见 DataAdapter 构造函数。
DataReader和DataAdapter有什么区别?
DataReader是对数据一次性前向只读的数据阅读器,用来接受XXXcommand的EcexuteReader方法查询数据库的结果,EcexuteReader只返回数据。
DataAdapter和XXXcommand比较相似,有一个SQL语句和连接对象构成。其调用fill方法将查询数据库的结果保存在dataset中的datatable中,fill方法检索数据,并且检索模式,也就是每个字段的字段名,数据类型,最大长度及其他属性.........
asp.net有这些知识,dataset,datatable,datareader,dataadapter.
dataset是用来做连接sql的一种方法,意思是把数据库的副本存在应用程序里,应用程序开始运行时,把数据库相关数据保存到dataset.
datatable表示内存中数据的一个表.常和defaultview使用获取可能包括筛选视图或游标位置的表的自定义视图。
datareader对象是用来读取数据库的最简单方式,它只能读取,不能写入,并且是从头至尾往下读的,无法只读某条数据,但它占用内存小,速度快
dataadapter对象是用来读取数据库.可读取写入数据,某条数据超着强,但它占用内存比datareader大,速度慢
求DataSet与DataAdapter的区别?
DataSet
作用:DataSet,DataAdapter读取数据。
问:什么是DataAdapter?
答:DataAdapter对象在DataSet与数据之间起桥梁作用
string strConn="uid=账号;pwd=密码;database=数据库;server=服务器";//SQL Server链接字符串
SqlConnection ConnSql=new SqlConnection (strConn); //Sql链接类的实例化
ConnSql.Open ();//打开数据库
string strSQL="SELECT * FROM 表名1 "; //要执行的SQL语句
SqlDataAdapter da=new SqlDataAdapter(strSQL,ConnSql); //创建DataAdapter数据适配器实例
DataSet ds=new DataSet();//创建DataSet实例
da.Fill(ds,"自定义虚拟表名");//使用DataAdapter的Fill方法(填充),调用SELECT命令
ConnSql.Close ();//关闭数据库
DataAdapter 用作 DataSet 和数据源之间的桥接器以便检索和保存数据。DataAdapter 通过映射Fill(这更改了 DataSet 中的数据以便与数据源中的数据相匹配)和Update(这更改了数据源中的数据以便与 DataSet 中的数据相匹配)来提供这一桥接器。
dataconnection是连接数据库用的,就像公路,是必须的。
dataset用来存放数据集是个巨大的仓库,datatable是小仓库,像集装箱。
那么,dataadapter就是货车。用来取或者存货物。
SqlDataAdapter 是 DataSet 和 SQL Server 之间的桥接器,用于检索和保存数据。SqlDataAdapter 通过对数据源使用适当的 Transact-SQL 语句映射 Fill(它可更改 DataSet 中的数据以匹配数据源中的数据)和 Update(它可更改数据源中的数据以匹配 DataSet 中的数据)来提供这一桥接。
当 SqlDataAdapter 填充 DataSet 时,它将为返回的数据创建必要的表和列(如果它们尚不存在)。但是,除非 MissingSchemaAction 属性设置为 AddWithKey,否则这个隐式创建的架构中就将不包括主键信息。也可以在使用 FillSchema 为数据集填充数据前,让 SqlDataAdapter 创建 DataSet 的架构(包括主键信息)。有关更多信息,请参见向 DataSet 添加现有约束。
SqlDataAdapter 与 SqlConnection 和 SqlCommand 一起使用,以便在连接到 Microsoft SQL Server 数据库时提高性能。
SqlDataAdapter 还包括 SelectCommand、InsertCommand、DeleteCommand、UpdateCommand 和 TableMappings 属性,使数据的加载和更新更加方便。
示例
以下示例使用 SqlCommand、SqlDataAdapter 和 SqlConnection,从数据库选择记录,并用选定的行填充 DataSet。然后返回已填充的 DataSet。为完成此任务,向该方法传递一个已初始化的 DataSet、一个连接字符串和一个查询字符串,后者是一个 Transact-SQL SELECT 语句。
public DataSet SelectSqlSrvRows(DataSet dataset,string connection,string query)
{
SqlConnection conn = new SqlConnection(connection);
SqlDataAdapter adapter = new SqlDataAdapter();
adapter.SelectCommand = new SqlCommand(query, conn);
adapter.Fill(dataset);
return dataset;
}
mysqldataadapter怎么手动设置updatecommand
MySQLDataAdapter起着DataSet和MySQL之间桥梁的作用,用于检索和保存数据。MySQLDataAdapter通过映射Fill(填充)和Update(更新)提供了该桥,Fill能改变DataSet中的数据以便与数据源中的数据匹配,Update能改变数据源中的数据以便与DataSet中的数据匹配(通过对数据源使用恰当的SQL语句)。
当MySQLDataAdapter填充DataSet时,如果表或列不存在,它将为返回的数据创建必要的表和列。但是,在隐式创建的方案中不包括主键信息,除非将MissingSchemaAction属性设为AddWithKey。在使用FillSchema用数据填充它之前,也能让MySQLDataAdapter创建DataSet方案,包含主键信息。
MySQLDataAdapter用于MySqlConnection和MySqlCommand的连接,用以提升连接至MySQL数据库时的性能。
ADO.Net中常用的对象有哪些?分别描述一下
Connection:主要是开启程序和数据库之间的连接。没有利用连接对象将数据库打开,是无法从数据库中取得数据的。Close和Dispose的区别,Close以后还可以Open,Dispose以后则不能再用。
Command:主要可以用来对数据库发出一些指令,例如可以对数据库下达查询、新增、修改、删除数据等指令,以及调用存在数据库中的存储过程等。这个对象是架构在Connection 对象上,也就是Command 对象是透过连接到数据源。
DataAdapter:主要是在数据源以及DataSet 之间执行数据传输的工作,它可以透过Command 对象下达命令后,并将取得的数据放入DataSet 对象中。这个对象是架构在Command对象上,并提供了许多配合DataSet 使用的功能。
DataSet:这个对象可以视为一个暂存区(Cache),可以把从数据库中所查询到的数据保留起来,甚至可以将整个数据库显示出来,DataSet是放在内存中的。DataSet 的能力不只是可以储存多个Table 而已,还可以透过DataAdapter对象取得一些例如主键等的数据表结构,并可以记录数据表间的关联。DataSet 对象可以说是ADO.NET 中重量级的对象,这个对象架构在DataAdapter对象上,本身不具备和数据源沟通的能力;也就是说我们是将DataAdapter对象当做DataSet 对象以及数据源间传输数据的桥梁。DataSet包含若干DataTable、DataTableTable包含若干DataRow。
DataReader:当我们只需要循序的读取数据而不需要其它操作时,可以使用DataReader 对象。DataReader对象只是一次一笔向下循序的读取数据源中的数据,这些数据是存在数据库服务器中的,而不是一次性加载到程序的内存中的,只能(通过游标)读取当前行的数据,而且这些数据是只读的,并不允许作其它的操作。因为DataReader 在读取数据的时候限制了每次只读取一笔,而且只能只读,所以使用起来不但节省资源而且效率很好。使用DataReader 对象除了效率较好之外,因为不用把数据全部传回,故可以降低网络的负载。
ADO.NET 使用Connection 对象来连接数据库,使用Command 或DataAdapter对象来执行SQL语句,并将执行的结果返回给DataReader 或 DataAdapter ,然后再使用取得的DataReader 或DataAdapter 对象操作数据结果。
哪位高手简洁分析下ADO.NET中的常用对象:DataAdapter、Command、DataSet的使用情况。。非常感谢!!
Command 对数据源执行命令。
DataReader 从数据源中读取只进且只读的数据流。
DataAdapter 用于将数据填充到 DataSet。
一般大量数据时候我用DataSet 数量不多用DataReader
DbConnection是数据库连接,是基础通道,数据通过它传输。DbCommand是工具,通过它操作数据库。DataSet是内存数据库,是放数据的地方。DataAdapter是适配器,它调用DbCommand执行,并将返回的结果填充到DataSet中。
举个例子,假定数据库是个仓库,那么在一次数据读取过程中,DataAdapter是搬运工,DbConnection是桥梁,DbCommand是交通工具,DataSet就是最终东西要放的地方(比如商店的货架):DataAdapter使用DataCommand将数据库里面的数据从DbConnection上读取出来放到DataSet中去,然后你要的东西已经在货架(DataSet)上了,那你就直接从货架上拿数据用了。
所以他们的分工不同,没有使用情况。
DataReader则是另外一种工具,DataAdapter是通过它读取数据的。在DbCommand将数据拿出来以后,DataReader负责将数据都组织起来供下一级使用。在DataAdapter中,数据被DataAdapter拿到手后放上了货架(DataSet)。
当然它也可以直接用,它创建一个快速只读的数据对象,相当于直销:通过DbCommand上拿出数据后,直接在商店门口就卖出去(用掉),而不是放到货架上(这里是DataSet),当前数据用掉以后才会继续拿下一个数据。
DataReader的优势是速度快,简洁,但因为不保存数据到货架上而是随用随取,所以往往需要你自己创建对象保存数据,比如常见的ORM方案,是将数据转换为强类型对象后保存的。(也就是说,DataReader是在线式的,仓库一关你就没法用了;DataSet是离线的,仓库关掉了你能继续从货架上拿数据用。)
所以,数据流程是:
数据库 --> DbConnection --> DbCommand -->DataReader --> DataAdapter --> DataSet
现代软件工程建议使用ORM,转换为对象实体:
数据库 --> DbConnection --> DbCommand -->DataReader --> 对象实体
当然你也可以直接用DataReader,至于后面的数据怎么处理那就看你自己的意思了。
因为DataSet保存的数据相当于一个内存数据库,其中的数据也都是弱类型的,所以用起来很麻烦容易出错,在现代软件产品中用得不多,大多是用ORM技术的。
打完这么多字才看到楼主的提问是零分! -_-!
c# DataReader和用DataAdapter来填充DataSet 两者的效率的区别有多大?
一个快,一个功能强。只是读出然后填充到DataSet 的效率差的不多,DataReader还要你自己去写循环填充的代码。
要按照你程序的具体设计来用。
建议用DataAdapter,DataReader会对数据库进行独占式连接,独占的时候被人无法对数据库进行修改,当DataReader没有循环完的时候它会一直独占数据库。
DataAdapter是一次性将数据读取到内存中(也就是DataSet)。这样会好一些。
没可比性,一个用空间换时间 ,这里的空间是内存,一个是用时间换空间!各有所用,看实际使用情况!
没可比性,一个用空间换时间 ,这里的空间是内存,一个是用时间换空间!各有所用,看实际使用情况!
这个正解..
表面上看 DataReader 要比 DataSet效率高.
因为DataReader是在线读取,也就是说在DataReader 读取数据期间,
客户端和数据库之间始终保持一个连接,一次只读一条数据;
而DataSet从数据库中读取一堆数据 到 客户端后就可以断开和数据库的连接了.
用 DataReader 会使数据库服务器的压力增大,会降低数据库服务器效率. (并发率高的情况下)
使用dataadapter和dataset更新数据库需要关闭连接吗
最好就是关闭,养成好的习惯,如果不关闭,占用的资源很多!
这个不一定的哈,没有什么规定的,但是我们一般都是要关闭
dataadapter是会自动关闭的,而dataset需要手动关闭。
关闭不是必须的,但不关闭占用网络资源,这个习惯不好。
C#编程:DataAdapter的fill方法的参数到底有几个?有四个的情况吗?
有四个的情况,开发中一般用来分页,4个参数分别是,dataset,开始的记录数,结束的记录数,表明,代码如下(这是我实际开发中用的基类里的一个方法):
public DataSet GetFenye(int b, int n,string sqlstr)
{
if (cc.State.Equals(ConnectionState.Closed)) { cc.Open(); }
SqlDataAdapter da = new SqlDataAdapter(sqlstr, cc);
DataSet ds = new DataSet();
int s = 0;
if (b > 1)
{
s = (b - 1) * n;
}
da.Fill(ds, s, n, "aa");
return ds;
}
perPage*(curPage-1),
perPage
都是分页上设置
fill 一共有11个重载方法
其中用得最多的是
Fill(dataset)
和fill(dataset ,tablename)这个就是你说的两个参数的情况
你现在看到的这个四个 参数的fill方法功能是 填充所有记录中从第一个整数处开始的第二个整数条记录,才填充到ds的crudatatable表中
比如fill(ds,10,20,"tb") 就是把selectcomand返回的所有数据中从第10条开始,连续取20条填充到ds的tb表中
其他的重载方法请看msdn帮助
http://msdn.microsoft.com/zh-cn/library/system.data.common.dbdataadapter.fill(VS.80).aspx
ado.net的技术路线
以往我们对数据库进行操作的方法是先连接上一个数据库,在保持连接的状态下进行数据的各种操作,如增删改查。这样的状况会有两个弊病,一是始终保持连接会造成资源的浪费,二是网络的各种不稳定因素会是这种连接发生丢失,从而对数据的操作也将丢失。鉴于以上所说道的两个或更多的其他原因,微软提出了另一种操作模式,就是非连接模式的数据操作,当然也没有丢弃以前ado中那种典型的连接模式的数据操作,故而诞生了ado.net及其两种典型的数据操作模式,即连接模式和非连接模式。当然,无论是采用那种模式来操作数据,首先是要取得数据连接然后对数据源进行操作或对数据源的副本进行操作。则连接为第一步必须完成的工作。连接的方法和ado时代没有多大的差别,不外乎与首先建立一个连接对象(或叫做实例化一个连接对象),要完成连接必须知道连接的数据源地址,有的还要知道数据源提供者。下面是典型的列子:string connString = "Data Source=localhost;Integrated Security=SSPI;Initial Catalog=Northwind;";string connstring="Provider=SQLOLEDB;Data Source=localhost;Initial Catalog=Northwind;";//一般来说OLEDB数据源需要设定provider一次到位的实例化连接对象OleDbConnection myconn=new OleDbConnection(connstring);或用Connection的属性设置连接对象的数据源OleDbConnection myconn=new OleDbConnection();myconn.ConnectionString=connstring;接下来就可用connection的open()方法打开连接了myconn.open()连接已经完成,接下来进入最重要的数据操作阶段(需要详细了解连接对象建立的同学可以自己去多查查资料哦)一、连接模式连接模式下 担负主要责任的对象是DataReader(然而说到DataReader那又不得不提到ExcuteReader()这个方法,因为DataReader是没有构造函数的一个类,DataReader只能通过command类的excutereader()方法来实例化),所以Datareader有以下几个特点:1.它无构造函数只能通过command的excutereader()方法来实例化,如:sqlcommand sqlcm=new sqlcommand(); sqldatarader dr =sqlcm.excutereader();2.它使用数据库时数据库连接必须保持打开状态(在这种状态下无法进行与connection相关的操作)3.它只能从前往后遍历信息,不能中途停下修改数据4.基于我前面说过的始终保持连接浪费资源,加上上面的第二条,那么我们必须用完就关闭,如:dr.close()或者如果我们怕忘记关闭,在实例化时给个参数commandbehavior.closeconnectionsqldatarader dr = cmd.executereader(commandbehavior.closeconnection);DataReader的用法比较灵活,一般都是通过条件判断来实现,如:while(dr.reader()){................}也有人为了操作的某种目的,通过DataReader数据读出来,然后存在一个新建的空DataTable中从而将DataReader转化成了DataTable,这种做法究竟是否可取,还真是仁者见仁智者见智。如果您实在是想在DataTable和DataReader之间进行转化,可以用下面的方法:DataReader转DataTable:DataTable.Load(DataReader对象,LoadOption.OverwriteChanges);DataTable转DataReader:DataReader Reader=DataTable.CreateDataReader()二、非连接模式非连接模式下担负主要责任的两个对象是DataAdapter和DataSet非连接模式下DataAdapter起到了一个桥梁的作用,看到这个有的人可能会联想到网络适配器或电源适配器,没错,他们的功能都是一样的,将各种不同的网络类型电源类型转化成统一能够满足要求的类型,这里的DataAdapter就是数据适配器,将各种不同类型的数据源经过适配转化成可以填入Dataset的数据。DataAdatper对象的使用一般有两种作用,一种是通过command对象如sqlcommand来执行sql语句,从数据源中检测数据,并将检索到的结果填充到DataSet中;还有一种就是把用户对DataSet对象对数据的改变更新到数据源中去。有人要忍不住问了,为什么非连接模式不需要做这一步呢???其实连接模式下通过command对象将所有对数据对象的单步操作都直接更新到数据库里去了,这叫单体操作。而连接模式下Dataset因为和数据服务器断开的,对单体的操作没有机会随时更新到数据库里去,这也就要求有这么一个对象在所有的数据操作完成后对各种数据操作(如增删改等操作)用各种对应的SQL命令统一更新到数据库里去,而这个对象就是DataAdapterle ,所以可以这么说,DataAdapterle 采用的它内嵌的SQL命令集进行的批量SQL操作。我们首先来看看command和dataadapter的实例化,一般我们可以这样来实例化他们:OleDbcommand olecmd=new OleDbcommand(sqlString,connObj);OleDataAdapter oledpt=new OleDataAdapter(sqlString,connObj);他们都都接收了一个SQL字符串和一个连接对象Connection,那么Command和DataAdapter有什么区别呢?在面对sql语句时他们的区别是:Command主要是运行纯粹的SQL命令,直接使SQL语句的操作得以实施。DataAdapter则内嵌着一套SQL的命令(也就是它的四个属性),如select,delete,insert,update,等到需要执行其中之一的时候还是要Command对象来出面,即对内嵌的命令对象进行实例化,如果没有实例化就调用,常常就会报错,不能通过编译(很多人在用dataadpter的update方法时就出错),所以我们常常会这样的用:oledpt.selectcomand=new olecommand();对于取数据command结合excutereader()利用Datareader来实现DataAdapter利用Fill()可以实现,但不应非要你用fill来实现。这里说说Fill()这个方法,打开DataAdapter可以发现,fill()方法来自他的父类的实现,其中Fill方法调用了FillFromCommand或FillFromReader方法。这两个方法中也分别调用了command对象excutereader。所以接下来的事情就不难理解了,感兴趣的朋友可以自己去看看fill的实现方法。DataAdapter对象可以隐藏和Connection、Command对象沟通的细节,通过DataAdapter对象建立、初始化 DataTable,从而和DataSet对象结合起来在内存存放数据表副本,实现离线式数据库操作。DataAdapter对象允许将DataSet对象中的数据保存到数据源中,也可以从数据源中读取数据,并且也可以底层数据保存体进行数据的添加、删除、更新等操作。DataAdapter对象含有四个不同的操作命令,分别如下:(1)、SelectCommand:用来或去数据源中的记录;(2)、InsertCommand:用来向数据源中新插入一条记录;(3)、UpdateCommand:用来更新数据源中的数据;(4)、DeleteCommand:用来删除数剧源中的记录。值得提出来特别说明的是,在实例化了DataAdapter对象后,此DataAdapter仍然是一个没有实际作用的数据适配器,因为它对数据库和数据集的操作实际上是通过它的四个Command对象(SelectCommand,InsertCommand,UpdateCommand,DeleteCommand)来实现的。所以我们实例化了SqlDataAdapter对象后需要再实例化它相关的SqlCommand对象SqlAdapter.SelectCommand = new SqlCommand();SqlAdapter.InsertCommand = new SqlCommand();SqlAdapter.UpdateCommand = new SqlCommand();SqlAdapter.DeleteCommand = new SqlCommand();这四个SqlCommand的引用实际都指向一个SqlCommand对象的实例,另外,利用commandbuilder对象可以自动实例化三个命令(Insertcommand,DeleteCommand,Updatecommand)但注意,要自动生成三个命令须使用实例化好了的SelectCommand来检索所需要的元素,那么就需要注意DataAdapter的实例化方式了,如果采用空参数方法实例化则须单独设置SelectCommand属性,才可以使用commandbuilder,如:SqlDataAdapter adapter = new SqlDataAdapter();adapter.SelectCommand = new SqlCommand(queryString, connection);SqlCommandBuilder builder = new SqlCommandBuilder(adapter);当如,如果是采用有参数实例化,则无须特别声明selectCommand的属性,因为这种有参数实例化的DataAdapter已经在实例化时自动完成了selectcommand属性,如SqlDataAdapter adapter = new SqlDataAdapter(“Select * from table",sqlconn);SqlCommandBuilder builder = new SqlCommandBuilder(adapter);所以,一般空参数实例化的dataadapter与selectcommand属性设置时同时出现的。有参数的dataadapter实例化是可以直接使用commandbuilder的。DataSet的断开模式是相对于数据服务器的断开,不至于每次都要和数据服务器发生连接,而DataSet的数据实际是存在服务的高速缓存中(有的人误以为是存在客户端的,那就大错特错了,想一下便知道,那样数据肯定是不安全的),这也就是说如果数据量大服务器的内存就浪费严重,这也是非连接模式的一个缺点,相比之下DataReader那种读一行存一行的做法就节约内存多了。三、回顾两种模式的关系两种模式表面看起来走了两条路线,但有很多共同点,最突出的要数以下两个方面:1、【开始相同】它们所需的数据连接的形式一样,开始都要通过建立connection对象来完成连接2、【最终相同】它们都需要在sqlcommand对象的配合下执行sql语句的操作,最终在sqlcommand对象的配合下实现对数据的增删改查操作。如连接模式的sql操作:sqlcommand sqlcm=new sqlcommand();//很显然是用了sqlcommand的实例对象sqldatarader dr =sqlcm.excutereader();? if(dr.HasRow)? {while(dr.read()){dr[""]..........//获取字段的值}}非连接模式的sql操作:sqlDataAdapter slqad=new sqlDataAdapter();sqlad.selectcommand=new sqlcommand(sqlstring,conn);//很显然,这里也用了sqlcommand