时
dataReader[i]
在逻辑上等同于
dataReader.GetValue(i)
它们是一样的吗?他们不一样吗?是否存在一种适合另一种情况的情况?
- 获取位于指定索引
的列- 返回指定字段的值。
但是当我使用它们时,它们都返回该字段的值。 “获得专栏”是什么意思? “返回一个字段的价值”是什么意思?
Bonus Chatter :
我打电话的时候:
reader[i];
reader.GetValue(i);
reader.GetString(i);
我每次都获得String
答案 0 :(得分:16)
最终取决于您所指的System.Data.IDataReader
的具体实现,但我们假设您的意思是System.Data.SqlClient.SqlDataReader
。
在这种情况下,reader[i]
和reader.GetValue(i)
完全相同。事实上,reader[i]
在内部调用reader.GetValue(i)
。 (您可以通过使用ILSpy等工具反汇编代码来查看。这两个成员都返回当前行的第i列中的值,并且无论值的类型如何(返回类型为object
)都将成功返回。这两个成员的文档有点误导,可以用更好的方式措辞。您可以随意使用这些成员中的任何一个,只需选择您认为更好的成员。
而reader.GetString(i)
专门用于将当前行的第i列中包含的值作为string
返回。如果该列中的值不是string
,则会抛出InvalidCastException
。如果您确定值为string
并且string
是您要使用的类型,请使用此方法。这将使您的代码更简洁,因为您不必执行演员表。
在您的特定情况下,当前行的第i列中的值必须是string
类型,这就是所有三个成员的返回值相同的原因。
如果写得正确,System.Data.IDataReader
的其他实现应该以相同的方式运行。