首页 新闻 赞助 找找看

SqlDataReader的 HasRows为true while(*.Read())却为false 无法读取数据

0
[已解决问题] 解决于 2015-07-06 23:24

if (reader.HasRows)  //此行调试时显示 true
{
while (reader.Read())//此行调试时却显示false
{
model = new LoveMinXingModel();
model.LId = reader.GetInt32(0); //可悲的是竟然没有直接掠过到最后竟然进入了括号到了这一步报错  “在没有任何数据时进行无效的读取尝试”...
model.LName = reader.GetString(1);
model.LAge = reader.GetInt32(2);
model.LGender = reader.GetString(3);
model.LLove = reader.GetString(4);
}
}

一小手冰冰凉的主页 一小手冰冰凉 | 菜鸟二级 | 园豆:202
提问于:2015-07-06 22:52
< >
分享
最佳答案
1

你查询的本应该有几条数据?

奖励园豆:5
liqipeng | 小虾三级 |园豆:1160 | 2015-07-06 23:00

就一条数据!!

一小手冰冰凉 | 园豆:202 (菜鸟二级) | 2015-07-06 23:02

@一小手冰冰凉: 本来只有一条数据,你调试时调用了一下Read(),游标走过去了,没有下一条了,自然就不走while了。

你这里估计问题是建了model却没用上。

liqipeng | 园豆:1160 (小虾三级) | 2015-07-06 23:04

@liqipeng: 


//if (reader.HasRows)
//{
// while (reader.Read())
//{
do
{
model = new LoveMinXingModel();
model.LId = reader.GetInt32(0);
model.LName = reader.GetString(1);
model.LAge = reader.GetInt32(2);
model.LGender = reader.GetString(3);
model.LLove = reader.GetString(4);

} while (reader.Read());

照样没用 。。。。

调试reader里面的字段count是5  呵呵 

一小手冰冰凉 | 园豆:202 (菜鸟二级) | 2015-07-06 23:08

@一小手冰冰凉: 我不是说改while循环,是你new了一个model = new LoveMinXingModel();你根本没用上啊。这里用do..while不合适

liqipeng | 园豆:1160 (小虾三级) | 2015-07-06 23:10

@liqipeng: 大神,为啥没有用上呢?

一小手冰冰凉 | 园豆:202 (菜鸟二级) | 2015-07-06 23:11

@一小手冰冰凉: 你为什么给model的属性l赋值?

liqipeng | 园豆:1160 (小虾三级) | 2015-07-06 23:13

@liqipeng: 

public List<LoveMinXingModel> GetListModel()
{
List<LoveMinXingModel> list = new List<LoveMinXingModel>();
string sql = "select LId, LName, LAge, LGender, LLove from LoveMinXing";
using (SqlDataReader reader = SQLHelper.ExecuteDataReader(sql, CommandType.Text, null))
{
if (reader.HasRows)
{
while (reader.Read())
{
LoveMinXingModel model = new LoveMinXingModel();
model.LId = reader.GetInt32(0);
model.LName = reader.GetString(1);
model.LAge = reader.GetInt32(2);
model.LGender = reader.GetString(3);
model.LLove = reader.GetString(4);
list.Add(model);

}

}


}

 

return list;
}

一个model 代表一个数据库的一行信息

一小手冰冰凉 | 园豆:202 (菜鸟二级) | 2015-07-06 23:15

@一小手冰冰凉: 

List<LoveMinXingModel> lst = new List<LoveMinXingModel>();
while (reader.Read())//此行调试时却显示false
{
model = new LoveMinXingModel();
model.LId = reader.GetInt32(0); //可悲的是竟然没有直接掠过到最后竟然进入了括号到了这一步报错  “在没有任何数据时进行无效的读取尝试”...
model.LName = reader.GetString(1);
model.LAge = reader.GetInt32(2);
model.LGender = reader.GetString(3);
model.LLove = reader.GetString(4);
lst.Add(model);
}
liqipeng | 园豆:1160 (小虾三级) | 2015-07-06 23:16

@liqipeng: 大神睡觉吧 我上面发的是输出List集合  有用 输出单model 没用  我已用

DataTable dt = SQLHelper.ExecuteDataTable(sql, CommandType.Text, p);

LoveMinXingModel model = new LoveMinXingModel();
model.LId = int.Parse(dt.Rows[0]["LId"].ToString());
model.LName = dt.Rows[0]["LName"].ToString();
model.LAge = int.Parse(dt.Rows[0]["LAge"].ToString());
model.LGender = dt.Rows[0]["LGender"].ToString();
model.LLove = dt.Rows[0]["LLove"].ToString();

来代替了  这种方法可行 用DataTable代替SqlDataReader

一小手冰冰凉 | 园豆:202 (菜鸟二级) | 2015-07-06 23:19

@一小手冰冰凉: 不好意思,刚有事走开。我最开始以为是漏掉了list.Add(model);。

如果还想继续排查一下问题,可以在表里多加几行数据看看ExecuteDataReader()能不能读出数据来;检查一下SQLHelper.ExecuteDataReader有没有什么问题(方便的话贴出来)。

liqipeng | 园豆:1160 (小虾三级) | 2015-07-06 23:55

@liqipeng:

public LoveMinXingModel GetModel(int lId)
{
LoveMinXingModel model = null;

string sql = "select LId, LName, LAge, LGender, LLove from LoveMinXing where LId=@LId ";
using (SqlDataReader reader = SQLHelper.ExecuteDataReader(sql, CommandType.Text, new SqlParameter[] { new SqlParameter("@LId", lId)}))
{
if (reader.HasRows)
{
while (reader.Read())
{
model = new LoveMinXingModel();
model.LId = reader.GetInt32(0);
model.LName = reader.GetString(1);
model.LAge = reader.GetInt32(2);
model.LGender = reader.GetString(3);
model.LLove = reader.GetString(4);


}
}
}
return model;


}

此方法试过了 又可行了、、、

一小手冰冰凉 | 园豆:202 (菜鸟二级) | 2015-07-07 00:10
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册