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

jiashilong_syit 2011-12-22 08:58:46
有一张表包括三个字段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); //执行失败

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

求解?
...全文
1720 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
salifei 2011-12-22
  • 打赏
  • 举报
回复 1
ID字段的类型为int,你用GetString()方法当然会报错,换成GetInt32()方法就行了。
建议不使用DataReader,因为它只读仅向前,虽然速度比DataSet会快那么一丁点,但是不好操作,并且它需要一直连接到数据库,会占用连接池,建议换成DataSet,牺牲的那点速度你感觉不出来,现在的服务器配置不像以前那么低,牺牲一丁点性能但可以得到更多:容易操作、不占用数据库连接池、安全等等。
如果你换用DataSet,代码写起来也更容易理解:
int myID=DataSet.Tables[结果表号码或结果表名称].Rows[行号][字段号或字段名];
qq17341943 2011-12-22
  • 打赏
  • 举报
回复
楼上正解
wuyq11 2011-12-22
  • 打赏
  • 举报
回复
SqlDataReader的GetOrdinal方法。接受一个表示字段名称的字符串,并返回该列的序号。
GetString不执行任何转换,因此所检索的数据必须已经是字符串
DENQH 2011-12-22
  • 打赏
  • 举报
回复
GetString获取指定列的字符串形式的值。
0和ID不string是数字,当然会错
可用GetInt32

本系统用于学习交流 部分代码: public void 市区读取() { string sqlstring = "select 市区名称 from 市区表"; 数据库操作.Connect(); SqlDataReader dr = 数据库操作.Reader(sqlstring); while (dr.Read()) { this.comboBox1.Items.Add(dr.GetString(dr.GetOrdinal("市区名称"))); this.comboBox48.Items.Add(dr.GetString(dr.GetOrdinal("市区名称"))); } dr.Close(); 数据库操作.SqlConClose(); 数据库操作.SqlDrClose(); } public void 县读取(string s,ComboBox b) { string sqlstring = "select 县名称 from 县表 where 所属市区=" + "'" + s + "'"; 数据库操作.Connect(); SqlDataReader dr = 数据库操作.Reader(sqlstring); while (dr.Read()) { b.Items.Add(dr.GetString(dr.GetOrdinal("县名称"))); } dr.Close(); 数据库操作.SqlConClose(); 数据库操作.SqlDrClose(); } public void 镇读取(string s,ComboBox b) { string sqlstring = "select 镇名 from 镇表 where 所属县=" + "'" + s + "'"; 数据库操作.Connect(); SqlDataReader dr = 数据库操作.Reader(sqlstring); while (dr.Read()) { b.Items.Add(dr.GetString(dr.GetOrdinal("镇名"))); } dr.Close(); 数据库操作.SqlConClose(); 数据库操作.SqlDrClose(); } public void 村读取(string s,ComboBox b) { string sqlstring = "select 村名 from 村表 where 所属镇=" + "'" + s + "'"; 数据库操作.Connect(); SqlDataReader dr = 数据库操作.Reader(sqlstring); while (dr.Read()) { b.Items.Add(dr.GetString(dr.GetOrdinal("村名"))); } dr.Close(); 数据库操作.SqlConClose(); 数据库操作.SqlDrClose(); }

111,101

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧