是
dataReader[i]在逻辑上相当于
dataReader.GetValue(i)是一样的吗?他们不一样吗?是否有一种比另一种更合适的情况?
有以不同方式记录
但是当我使用它们时,它们都返回字段的值。“得到专栏”是什么意思?“返回字段的值”是什么意思?
奖金聊天器
当我打电话:
reader[i];
reader.GetValue(i);
reader.GetString(i);每次我都能拿到String
发布于 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。当您确定值是string且string是要使用的类型时,请使用此方法。这将使您的代码更简洁,因为您不必执行强制转换。
在特定情况下,当前行第一列中的值必须是string类型,这就是为什么所有三个成员的返回值都相同的原因。
如果编写正确,System.Data.IDataReader的其他实现应该以相同的方式运行。
https://stackoverflow.com/questions/8437270
复制相似问题