说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

.NET中DataSet和DataReader的区别与转换

HTML文档下载 WORD文档下载 PDF文档下载
介绍了.NET中DataSet和DataReader的区别,以及如何将DataReader转换到DataSet

 

区别:

DataReader:和数据库处于一直连接状态。只读只能向前读取,一次只能读取一行信息。内存占用少,高效率! 

Dateset:和数据库是断开的离线状态。返回都是数据集,可以对其中的数据做任意操作,内存占用多,效率稍低。

 

选择使用DataReader的情形: 

1)不需要缓存数据。 

2)要处理的结果集太大,内存中放不下。 

3)一旦需要以仅向前、只读方式快速访问数据。

 

 

DataReader转换到DataSet

 

public static DataSet ConvertDataReaderToDataSet(SqlDataReader reader) { DataSet dataSet = new DataSet(); do { // Create new data table DataTable schemaTable = reader.GetSchemaTable(); DataTable dataTable = new DataTable(); if ( schemaTable != null ) { // A query returning records was executed for ( int i = 0; i < schemaTable.Rows.Count; i++ ) { DataRow dataRow = schemaTable.Rows[ i ]; // Create a column name that is unique in the data table string columnName = ( string )dataRow[ "ColumnName" ]; //+ " // Add the column definition to the data table DataColumn column = new DataColumn( columnName, ( Type )dataRow[ "DataType" ] ); dataTable.Columns.Add( column ); } dataSet.Tables.Add( dataTable ); // Fill the data table we just created while ( reader.Read() ) { DataRow dataRow = dataTable.NewRow(); for ( int i = 0; i < reader.FieldCount; i++ ) dataRow[ i ] = reader.GetValue( i ); dataTable.Rows.Add( dataRow ); } } else { // No records were returned DataColumn column = new DataColumn("RowsAffected"); dataTable.Columns.Add(column); dataSet.Tables.Add( dataTable ); DataRow dataRow = dataTable.NewRow(); dataRow[0] = reader.RecordsAffected; dataTable.Rows.Add( dataRow ); } } while ( reader.NextResult() ); return dataSet; }

 

 

备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘