SqlDataReader:是专门用来读取SQl数据库中的数据的,对读取方式进行了优化
oledbDataReader:适用于所有使用oledb驱动的数据库,例如SQl、MySql、ORACAL、Access等
DataReader:是上面两个类的父类,属于基类
oledbDataReader可以访问ORACAL、MySql、Access数据库、甚至是Excel表格
SqlDataReader是C#中专门操作MS SQLServer数据库的数据集合,在oledb的基础上做了优化
另外oledbDataReader也可以操作MS SQLServer数据库,但是SqlDataReader对它做了一些优化。
OleDbDataReader对象可以通过OleDbCommand对象的ExecuteReader()方法获得;
通常使用方法为:
while (Reader.Read())
{
//使用Reader.GetString()等类似的方法依次读取每个字段的值
}
Reader.Read()读取新的一行记录,返回bool型,读到最后一行时不成功返回false;
Reader.GetString(int 列号)读取当前记录行中指定列中的字符串,列从0开始计算,如果要读的内容为空或不是字符串型,则产生InvalidCastException异常;
Reader.GetBoolean(int 列号)读取当前记录行中指定列中的布尔值;
类似的方法还有GetByte,GetBytes,GetChar,GetDateTime,GetDecimal,GetDouble,GetFloat,GetInt16,GetInt32,GetInt64。
但我在从Excel中读取数据的时候发现读Int型总是产生异常,一定要用GetDouble方法,然后再强制转化为Int型。
GetData:返回请求的列序号的OleDbDataReader对象,不知道是一行的还是所有行的,没用过;
GetDataTypeName:获取源数据类型的名称,用在Excel里测试了一下,数字类型返回的是DBTYPE_R8,字符串类型返回的是DBTYPE_WVARCHAR,日期型返回是DBTYPE_DATE,所以不知道这个该怎么用;
GetEnumerator:返回一个 System.Collections.IEnumerator,可用于循环访问数据读取器中的行。不知道啥意思;
GetFieldType:获取是对象的数据类型的 System.Type。这个彩色真正的获得对象的数据类型,不过数字类型都返回Double,所以对于Int型等得用GetDouble获取值再转化类型,字符串就返回String型,日期返回DateTime型,空值也返回String型,但是用GetString获取空值时却产生异常,麻烦;
GetName:获取指定列的名称;
GetOrdinal:在给定列名称的情况下获取列序号;
GetSchemaTable:返回一个DataTable,它描述OleDbDataReader的列元数据;
GetTimeSpan:获取指定列的 System.TimeSpan 对象形式的值;
GetValue:返回object型,可以读到任何数据,包括空值(通过GetType可知其类型为System.DBNull),如果不清楚数据类型可以使用这种方法得到值,判断数据类型,然后再进行相应转化;
GetValues:获取当前行中的所有属性列,返回值通过参数返回;
IsDBNull:列中是否包含不存在的或已丢失的值;
NextResult:当读取批处理 SQL 语句的结果时,使数据读取器前进到下一个结果,还不明白。