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);
}
}
你查询的本应该有几条数据?
就一条数据!!
@一小手冰冰凉: 本来只有一条数据,你调试时调用了一下Read(),游标走过去了,没有下一条了,自然就不走while了。
你这里估计问题是建了model却没用上。
@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 呵呵
@一小手冰冰凉: 我不是说改while循环,是你new了一个model = new LoveMinXingModel();你根本没用上啊。这里用do..while不合适
@liqipeng: 大神,为啥没有用上呢?
@一小手冰冰凉: 你为什么给model的属性l赋值?
@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 代表一个数据库的一行信息
@一小手冰冰凉:
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: 大神睡觉吧 我上面发的是输出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
@一小手冰冰凉: 不好意思,刚有事走开。我最开始以为是漏掉了list.Add(model);。
如果还想继续排查一下问题,可以在表里多加几行数据看看ExecuteDataReader()能不能读出数据来;检查一下SQLHelper.ExecuteDataReader有没有什么问题(方便的话贴出来)。
@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;
}
此方法试过了 又可行了、、、