SqlCommand 仅 returns 一行
SqlCommand only returns one row
尝试只 return 前几行,因为我的数据库太大了,但是当我测试我的 SQL 时,我做了 select *
并且只有 return编辑了第一行。
SqlCommand sqlCmd = new SqlCommand();
SqlDataReader reader;
sqlCmd.CommandText = "SELECT * FROM Log";
sqlCmd.CommandType = CommandType.Text;
sqlCmd.Connection = myConnection;
myConnection.Open();
reader = sqlCmd.ExecuteReader();
Log logs = null;
while (reader.Read())
{
logs = new Log();
logs.Id = Convert.ToInt32(reader.GetValue(0));
}
return logs;
myConnection.Close();
我的解决方案有什么问题?
在循环中,您不断地重新创建变量 logs
的实例,从而覆盖前一个实例并以查询返回的最后一条记录的值结束。你需要一个List<Log>
List<Log> logs = new List<Log>();
while (reader.Read())
{
Log current = new Log();
logs.Id = Convert.ToInt32(reader.GetValue(0));
logs.Add(current);
}
您可以将此列表用作网格的数据源,或者只保留它以备将来参考...
foreach(Log log in logs)
MessageBox.Show(log.Id);
尝试只 return 前几行,因为我的数据库太大了,但是当我测试我的 SQL 时,我做了 select *
并且只有 return编辑了第一行。
SqlCommand sqlCmd = new SqlCommand();
SqlDataReader reader;
sqlCmd.CommandText = "SELECT * FROM Log";
sqlCmd.CommandType = CommandType.Text;
sqlCmd.Connection = myConnection;
myConnection.Open();
reader = sqlCmd.ExecuteReader();
Log logs = null;
while (reader.Read())
{
logs = new Log();
logs.Id = Convert.ToInt32(reader.GetValue(0));
}
return logs;
myConnection.Close();
我的解决方案有什么问题?
在循环中,您不断地重新创建变量 logs
的实例,从而覆盖前一个实例并以查询返回的最后一条记录的值结束。你需要一个List<Log>
List<Log> logs = new List<Log>();
while (reader.Read())
{
Log current = new Log();
logs.Id = Convert.ToInt32(reader.GetValue(0));
logs.Add(current);
}
您可以将此列表用作网格的数据源,或者只保留它以备将来参考...
foreach(Log log in logs)
MessageBox.Show(log.Id);