首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DataReader[i]诉DataReader.GetValue(i) vs DataReader.GetString(i)

DataReader[i]诉DataReader.GetValue(i) vs DataReader.GetString(i)
EN

Stack Overflow用户
提问于 2011-12-08 20:29:58
回答 1查看 7.2K关注 0票数 11

代码语言:javascript
复制
dataReader[i]

在逻辑上相当于

代码语言:javascript
复制
dataReader.GetValue(i)

是一样的吗?他们不一样吗?是否有一种比另一种更合适的情况?

以不同方式记录

  • 获取位于指定索引处的列。
  • 返回指定字段的值。

但是当我使用它们时,它们都返回字段的值。“得到专栏”是什么意思?“返回字段的值”是什么意思?

奖金聊天器

当我打电话:

代码语言:javascript
复制
reader[i];
reader.GetValue(i);
reader.GetString(i);

每次我都能拿到String

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-12-08 20:42:07

最终,这取决于您所指的System.Data.IDataReader的特定实现,但让我们假设您指的是System.Data.SqlClient.SqlDataReader

在这种情况下,reader[i]reader.GetValue(i)做的事情完全一样。实际上,reader[i]内部调用reader.GetValue(i)。(您可以通过使用像ILSpy这样的工具来分解代码来看到这一点。)这两个成员都返回当前行的第一列中的值,并且无论值的类型如何(返回类型为object)都将成功返回。这两位成员的文件有点误导,可以用更好的方式来表述。你可以在任何你喜欢的地方使用这些成员中的任何一个,只要选择一个你感觉更好的。

reader.GetString(i)专门设计为将当前行的第一列中包含的值作为string返回。如果该列中的值不是string,则将引发InvalidCastException。当您确定值是stringstring是要使用的类型时,请使用此方法。这将使您的代码更简洁,因为您不必执行强制转换。

在特定情况下,当前行第一列中的值必须是string类型,这就是为什么所有三个成员的返回值都相同的原因。

如果编写正确,System.Data.IDataReader的其他实现应该以相同的方式运行。

票数 16
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8437270

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档