能否从一个没有读到数据SqlDataReader中创建DataTable
我要经常通过SQL语句得到一个表,然后读入到DataTable中,过去的做法是通过DataAdapter.Fill(dataset,   p_MapName);实现,然后取出dataset.Tables[0]就可以了,经过比较,发现还是SqlDataReader速度快,因此,我改为通过SqlDataReader读取数据,并根据SqlDataReader.Read()一行后,手工创建DataTable,效率较高,但有个问题,如果一行数据都没有读到,则DataTable无法创建,因为不知道有就列,也不知道列的类型,而通过DataAdapter.Fill可以得到一张空的DataTable
------解决方案--------------------DS = Sqldb.SqlSelectDataSet(strSql) 
 For i = 1 To DS.Tables(0).Rows.Count - 1 
                     DT.Rows.Add(DT.NewRow) 
                     DT.Rows(j).Item( "INVSEC ") = DS.Tables(0).Rows(i).Item( "INVSEC ") 
                     DT.Rows(j).Item( "INVSYC ") = DS.Tables(0).Rows(i).Item( "INVSYC ") 
                     DT.Rows(j).Item( "INVAMT ") = DS.Tables(0).Rows(i).Item( "INVAMT ") 
 まだ 
             DT.Columns.Add( "INVSEC ") 
             DT.Columns.Add( "INVSYC ") 
             DT.Columns.Add( "INVAMT ") 
             DT.Columns.Add( "INVAMT_TAX ") 
             DT.Columns.Add( "INVTAX ") 
             DT.Columns.Add( "TOTAL ") 
             DT.Rows.Clear() 
 Next 
 Me.DataSource = DS.Tables(0)   
 空白的没试过
------解决方案--------------------你这样做的效率还没有直接读到datatable中快
------解决方案--------------------IList <实体对象>  
 感觉扩展性更好!
------解决方案--------------------也是Read()数据插入IList <实体对象>
------解决方案--------------------没必要这样做..   
 ///  <summary>  
 	/// 将DataReader转为DataTable 
 	///  </summary>  
 	///  <param name= "DataReader "> DataReader </param>  
 	public static DataTable ConvertDataReaderToDataTable(SqlDataReader dataReader) 
 	{ 
 		///定义DataTable 
 		DataTable datatable = new DataTable();   
 		try 
 		{	///动态添加表的数据列 
 			for(int i = 0; i  < dataReader.FieldCount; i++) 
 			{ 
 				DataColumn myDataColumn = new DataColumn(); 
 				myDataColumn.DataType = dataReader.GetFieldType(i); 
 				myDataColumn.ColumnName = dataReader.GetName(i); 
 				datatable.Columns.Add(myDataColumn); 
 			}   
 			///添加表的数据 
 			while(dataReader.Read()) 
 			{ 
 				DataRow myDataRow = datatable.NewRow(); 
 				for(int i = 0; i  < dataReader.FieldCount; i++) 
 				{ 
 					myDataRow[i] = dataReader[i].ToString(); 
 				} 
 				datatable.Rows.Add(myDataRow); 
 				myDataRow = null; 
 			} 
 			///关闭数据读取器 
 			dataReader.Close(); 
 			return datatable; 
 		} 
 		catch(Exception ex) 
 		{ 
 			///抛出类型转换错误 
 			throw new Exception(ex.Message,ex); 
 		} 
 	}