DataReader类访问字段的值
有2种方法。第一种是Item属性,此属性返回字段索引或者字段名字对应的字段的值。第二种是Get方法,此方法返回有字段索引指定的字段的值。有点难以理解,不是吗?不要紧,看例子就OK了。
Item属性
每个DataReader类都定义一个Item属性。比如现在我们有一个DataReader实例dr,对应的sql语句是select Fid,Fname from friend,则我们可以使用下面的方法取得返回的值:
object ID = dr[“Fid”];
object Name = dr[“Fname”];
或者:
object ID = dr[0];
object Name = dr[0];
注意索引总是从0开始的。另外也许您发现了我们使用的是object来定义对ID和Name,是的,Item属性返回的值是object型,但是您可以强制类型转换。
int ID = (int)dr[“Fid”];
string Name = (string)dr[“Fname”];
记住:确保类型转换的有效性是您自己的责任,否则您将得到异常。
Get方法
起始我们在第一篇文章里面已经使用过改方法了。每个DataReader都定义了一组Get方法,比如GetInt32方法把返回的字段值作为.net clr 32位证书。同上面的例子一样我们用如下方式访问Fid和Fname的值:
int ID = dr.GetInt32(0);
string Name = dr.GetString(1);
注意虽然这些方法把数据从数据源类型转化为.net数据类型,但是他们不执行其他的数据转换,比如他们不会把16位整数转换为32位的。所以您必须使用正确的Get方法。另外Get方法不能使用字段名来访问字段,也就是说上面的没有:
int ID = dr.GetInt32(“Fid”); //错误
string Name = dr.GetString(“Fname”); //错误
显然上面这个缺点在某些场合是致命的,当你的字段很多的时候,或者说你过了一段时间以后再来看你这些代码,你会觉得很难以理解!当然我们可以使用其他方法来尽量解决这个问题。一个可行的办法是使用const:
const int FidIndex = 0;
const int NameIndex = 1;
int ID = dr.GetInt32(FidIndex);
string Name = dr.GetString(NameIndex);
这个办法并不怎么好,另外一个好一些的办法:
int NameIndex = dr.GetOrdinal(“Fname”); //取得Fname对应的索引值
string Name = dr.GetString(NameIndex);
这样似乎有点麻烦,但是当须要遍历阅读器种大量的结果集的时候,这个方法很有效,因为索引只需执行一次。
int FidIndex = dr.GetOrdinal(“Fid”);
int NameIndex = dr.GetOrdinal(“Fname”);
while(dr.Read())
{
int ID = dr.GetInt32(FidIndex);
string Name = dr.GetInt32(NameIndex);
}
分享到:
相关推荐
- 除了`GetValue()`之外,还有其他方法如`GetName()`用于获取列名,`GetValues()`用于获取当前记录的所有字段值,并将它们放入数组中,以及`GetFieldType()`用于获取字段的.NET数据类型。 7. **关闭连接**: - 在...
2. **反射**: 反射允许在运行时检查类、接口、字段、方法等元数据信息,并能动态地创建对象和调用方法。在我们的场景中,反射用来在没有事先知道具体类型的情况下,根据类名实例化对象。 3. **泛型**: 泛型是.NET ...
+ UPDATE <数据表名> SET <字段名1>=<字段名1的值>, <字段名2>=<字段名2的值>, … WHERE <条件1> AND[OR] <条件2> + 功能:修改数据表中满足条件的记录。 * 删除记录语句DELETE格式: + DELETE <数据表名> WHERE ...
- 抽象类(Abstract Class)可以有方法实现,也可以包含字段,但不能实例化。它可以单继承,但可以多层继承。抽象类用于提供部分实现并定义基类结构。 6. **System.String 和 System.StringBuilder 的区别** - ...
dataReader["name"] 这种方式访问字段的值,需要强制类型转换,因为 dataReader["name"] 就像一个数组,数组中的每个元素的类型都应该一样,所以 dataReader[] 这个数组中的元素类型也被定义为 object 类型,以方便...
DB类:数据库访问类 属性: ConnString——连接字符串(如:server=.;uid=sa;pwd=;database=ufdata_001_2010) CMDstring——未使用 oleConnString——连接ACCESS数据库的字符串 方法: OpenConn——打开数据库(无...
这个类通常会有一个构造函数来初始化数据库连接字符串,以及一系列静态方法,如 `ExecuteNonQuery`(用于执行非查询操作,如插入、更新和删除),`ExecuteScalar`(用于返回单个值,如查询某字段的最大值),`...
常用方法有Read(),用于移动到下一行,和GetXXX()系列方法,用于获取当前行的字段值。 ### 6. DataAdapter对象 DataAdapter对象用于在DataSet和数据库之间同步数据。它的Fill()方法用于从数据库填充DataSet,而...
使用`ExecuteScalar()`方法可以获取单个值,如查询字段的最大值。`ExecuteReader()`方法返回一个`DataReader`对象,用于按需读取数据流,适用于处理大量数据。 5. **ASP.NET中使用ADO.NET**: 在ASP.NET Web应用...
12. 在设计ADO.NET应用程序时,直接使用Command对象访问数据源更有效的情况包括:在SQL Server数据库的表中搜索字段值、计算数据表的行数以及创建存储过程。而分析和处理XML数据更适合使用ADO.NET的数据流对象。 13...
- **DataRow对象**:表示DataTable中的一行数据,通过DataRow对象可以访问和修改行中的各个字段值。 通过深入理解ADO.NET的结构、优势以及DataSet对象的使用,开发者可以有效地在VB.Net中实现高效、稳定的数据库...
12. 使用Command对象直接访问数据源更有效的情况包括:在SQL Server数据库中搜索特定字段值或执行复杂的SQL查询,因为这样可以避免通过DataSet和DataAdapter的额外开销。 在设计ADO.NET应用程序时,理解这些核心...
8. **ASP.NET页面间传递值**:常见的方法包括使用QueryString参数、Session变量、Server.Transfer,还可以通过ViewState、Cookie或者隐藏字段等方式。 9. **值类型与引用类型**:在程序示例中,值类型(如int)和...
- **Protected**: 保护成员可以在类内部及其派生类中访问。它主要用于类层次结构中,以便基类的成员可以在派生类中使用,但不对外公开。 - **Public**: 公共成员对所有类都开放,没有任何访问限制。这是一种最开放的...
- `protected`:保护成员,类内部和继承类中可以访问。 - `public`:公共成员,无访问限制。 - `internal`:在同一命名空间内的类可以访问。 - `sealed`:密封类,不允许其他类继承。 【SQL查询技巧】 在SQL ...
数据访问抽象基础类 主要是访问Mysql数据库主要实现如下功能 1.得到最大值 2.是否存在 3.是否存在(基于MySqlParameter) 4.执行SQL语句,返回影响的记录数 5.执行MySql和Oracle滴混合事务,执行多条SQL语句,实现...
3. **类成员访问修饰符**:C#中,类成员的访问权限有Private(私有,仅在类内部可访问)、Protected(保护,类内部及子类可访问)和Public(公共,无访问限制)。 4. **类型转换**:在C#中,浮点数到整数的转换可能...
// 访问字段值,如:dataReader->GetInt32(0) 获取第一列的整数值 Console::WriteLine("字段1: {0}, 字段2: {1}", dataReader->GetString(0), dataReader->GetString(1)); } // 关闭数据读取器和连接 dataReader-...
.NET面试题目涉及了广泛的.NET框架和C#语言的基础知识,包括类与对象、数据类型、面向对象特性、异常处理、接口、数据访问、页面间通信以及一些高级概念如反射、序列化和ORM等。以下是对这些知识点的详细解释: 1. ...
通过反射,我们可以访问类的私有和公共属性,包括它们的名称、类型以及默认值。在ORM上下文中,反射用于读取类的属性并映射到数据库表的相应字段。 接下来,我们聚焦于`DataReaderExtensionSample`。`DataReader`是...