+ -
当前位置:首页 → 问答吧 → 关于c#中SqlDataReader的GetString()方法的疑惑.

关于c#中SqlDataReader的GetString()方法的疑惑.

时间:2011-12-22

来源:互联网

有一张表包括三个字段ID,Name,Password(ID为主键,自增长属性)
sqlDataReader是一个关联的SqlDataReader对象
问题如下:
sqlDataReader.GetString(sqlDataReader.GetOrdinal("Name"); //执行成功
sqlDataReader.GetString(sqlDataReader.GetOrdinal("Password"); //执行成功
sqlDataReader.GetString(sqlDataReader.GetOrdinal(1); //执行成功
sqlDataReader.GetString(sqlDataReader.GetOrdinal(2); //执行成功

sqlDataReader.GetString(sqlDataReader.GetOrdinal("ID"); //执行失败
sqlDataReader.GetString(0); //执行失败

为什么对第一个字段就失败呢?

求解?

作者: jiashilong_syit   发布时间: 2011-12-22

GetString获取指定列的字符串形式的值。
0和ID不string是数字,当然会错
可用GetInt32

作者: DENQH   发布时间: 2011-12-22

SqlDataReader的GetOrdinal方法。接受一个表示字段名称的字符串,并返回该列的序号。
GetString不执行任何转换,因此所检索的数据必须已经是字符串

作者: wuyq11   发布时间: 2011-12-22

楼上正解

作者: qq17341943   发布时间: 2011-12-22

ID字段的类型为int,你用GetString()方法当然会报错,换成GetInt32()方法就行了。
建议不使用DataReader,因为它只读仅向前,虽然速度比DataSet会快那么一丁点,但是不好操作,并且它需要一直连接到数据库,会占用连接池,建议换成DataSet,牺牲的那点速度你感觉不出来,现在的服务器配置不像以前那么低,牺牲一丁点性能但可以得到更多:容易操作、不占用数据库连接池、安全等等。
如果你换用DataSet,代码写起来也更容易理解:
int myID=DataSet.Tables[结果表号码或结果表名称].Rows[行号][字段号或字段名];

作者: salifei   发布时间: 2011-12-22