Ian*_*oyd 11 .net ado.net datareader
是
dataReader[i]
Run Code Online (Sandbox Code Playgroud)
在逻辑上相当于
dataReader.GetValue(i)
Run Code Online (Sandbox Code Playgroud)
它们是一样的吗?他们不一样吗?是否存在一种适合另一种情况的情况?
有不同的记录:
- 获取位于指定索引处的列
- 返回指定字段的值.
但是当我使用它们时,它们都会返回该字段的值."获得专栏"是什么意思?"归还一个领域的价值"是什么意思?
奖金Chatter:
我打电话的时候:
reader[i];
reader.GetValue(i);
reader.GetString(i);
Run Code Online (Sandbox Code Playgroud)
我String每次都得到一个
Ada*_*lph 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.如果该列中的值不是a string,InvalidCastException则抛出a.当您确定值是a string并且string是要使用的类型时,请使用此方法.这将使您的代码更简洁,因为您不必执行强制转换.
在您的特定情况下,当前行的第i列中的值必须是类型string,这就是所有三个成员的返回值相同的原因.
如果写得正确,其他实现System.Data.IDataReader应该以相同的方式运行.
| 归档时间: |
|
| 查看次数: |
6343 次 |
| 最近记录: |