Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 数据集或读取器还是什么?_C#_Asp.net - Fatal编程技术网

C# 数据集或读取器还是什么?

C# 数据集或读取器还是什么?,c#,asp.net,C#,Asp.net,使用类从数据库中获取一行数据时,最好使用什么: 数据集 一个读卡器,在结构中存储数据做什么 还有什么 感谢您的时间,NathanDataAdapter(用于填充数据集)使用DataReader来完成此操作 因此,DataReader总是比DataAdapter更轻量级、更易于使用。数据集和数据表在内存使用方面总是有巨大的开销。如果您只获取一行,则不会产生任何影响,但对于较大的结果集,则会产生巨大的影响 如果要获取固定数量的项目,在MS SQL Server中,存储过程(或参数化命令)中的输出

使用类从数据库中获取一行数据时,最好使用什么:

  • 数据集
  • 一个读卡器,在结构中存储数据做什么
  • 还有什么
感谢您的时间,Nathan

DataAdapter(用于填充数据集)使用DataReader来完成此操作

因此,DataReader总是比DataAdapter更轻量级、更易于使用。数据集和数据表在内存使用方面总是有巨大的开销。如果您只获取一行,则不会产生任何影响,但对于较大的结果集,则会产生巨大的影响


如果要获取固定数量的项目,在MS SQL Server中,存储过程(或参数化命令)中的输出变量通常性能最佳。

如果使用读卡器,则必须与数据库建立开放连接通常使用DataReader来获取组合或dataGrid,但如果您想在内存中存储数据并关闭数据库连接,则必须使用Datatable


注意:请原谅我的英语水平

如果您只想以只读方式访问数据,请使用原始数据读取器;它是最快速、最轻量级的数据访问方法


但是,如果您打算更改数据并保存回数据库,那么我建议使用DataAdapter和DataSet(甚至是类型化的DataSet),因为DataSet类负责跟踪对集合的更改、添加和删除,这使得保存更加容易。此外,如果数据集中有多个表,则可以在数据集中对它们之间的引用约束进行建模。

数据读取器始终是您的最佳选择,前提是它与您的用法兼容。DataReader非常快速、高效、轻量级——但它们要求您在其生命周期中维护活动/开放数据库连接,这意味着它们不能跨AppDomains(或跨Web服务等)进行封送

数据集实际上是由数据读取器填充的——它们是急切加载的(所有数据在任何数据被访问之前都被填充),因此性能较差,但它们具有可序列化的额外好处(它们本质上只是一个DTO),这意味着它们很容易跨应用域或Web服务携带


这种差异有时可以这样概括:“DataReader非常适合ADO.NET在线(这意味着保持数据库连接打开是可以的),而数据集非常适合ADO.NET离线(用户不一定能直接连接到数据库).

但是,我可以使用DataReader并将一行结果存储在一个结构中,以便从Web服务传回。这是一个好主意吗?我不像大多数人那样使用数据集。我只是在获取数据集时进行阅读。为了克服必须关闭读卡器这一事实,我可以将其存储在一个结构中。我想我现在可以使用Class对象,当我只需要一行时从数据读取器返回数据,当我需要多行时返回数据集。这听起来最好吗?你说得对,但既然你已经有了类,你也可以很容易地返回一个
集合
。避免使用数据表和数据集通常是个好主意(它们非常适合表格数据,但经常被滥用,并会妨碍良好的OOP)感谢STW,所以这种情况下的类就像Java中的bean一样,它只保存一个项的数据?或者因为它是一个集合,所以它可以保存多个类(或bean)?