您好,欢迎来好库! [ 请登录 ] [ 免费注册 ] 好库网首页 | 我的好库
好库网
好饱的专栏
好饱

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

所属分类:所有分类 » 软件开发 » .NET » C#
发布者:好饱
发布日期:2011-5-8 8:35:36   更新日期:2011-5-8 8:35:36
浏览次数:155
阅读次数:492
评分:4.80
介绍:介绍了.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; 
}

 

 



免责声明:好库网所展示的信息由买卖双方自行提供,其真实性、准确性和合法性由信息发布人负责。好库网不提供任何保证,并不承担任何法律责任。