我想从表Account中选择多个(所有)值。
string query = "SELECT * FROM Account";
SqlConnection connection = new SqlConnection(connectionString);
SqlCommand command = new SqlCommand(query, connection);
SqlDataReader reader;
connection.Open();
reader = command.ExecuteReader();
reader.Read();
label1.Text = reader["PasswordHash"].ToString();
connection.Close();
为什么这总是只返回第一行。实际上它返回一行,因为如果我在where子句中设置类似where id = 2 and id = 3
的东西,它仍然只返回一个值。
表格在Management Studio中检查了多个值,查询运行应该如此。
提前致谢。
答案 0 :(得分:8)
因为您没有遍历查询结果,所以它只显示一个结果。
string query = "SELECT * FROM Account";
SqlConnection connection = new SqlConnection(connectionString);
SqlCommand command = new SqlCommand(query, connection);
SqlDataReader reader;
connection.Open();
reader = command.ExecuteReader();
While(reader.Read())
{
label1.Text += " " +reader["PasswordHash"].ToString();
}
connection.Close();
上面的代码循环遍历查询结果,并在分配给label1.text
的串联字符串中为您提供所需的内容。您还可以在Console.WriteLine(reader["PasswordHash"].ToString());
循环
while
来查看结果
答案 1 :(得分:3)
你应该做
while (reader.Read())
// process information
您需要迭代您检索到的所有信息。
旁注:在SqlConnection,SqlCommand和SqlDataReader上使用using语句,以确保正确处理对象。
答案 2 :(得分:2)
读者一次只能推送一条记录。您需要在循环中遍历结果集:
while (reader.Read()) {
// do something with the current row by accessing reader[]
}
reader.Close();
有更好的方法来构建代码,但这说明了您缺少的点并且需要的更改次数最少。
答案 3 :(得分:2)
你需要循环,如下所示:
SqlDataReader reader = command.ExecuteReader();
// Call Read before accessing data.
while (reader.Read())
{
Console.WriteLine(String.Format("{0}, {1}",
reader[0], reader[1]));
}
MSDN文档中有一个示例:
http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqldatareader.aspx
答案 4 :(得分:1)
行reader.Read()
将获得下一行,因此您可以使用while(reader.Read())
来迭代行。
答案 5 :(得分:1)
查看代码我的建议是使用其他一些对象来添加代码。标签文字不是一个合适的选择。
尝试在列表中使用foreach循环来检索已返回的所有数据。
答案 6 :(得分:1)
你需要一个while循环;
while(reader.Read()) {
Console.WriteLine("{0}", reader[0]);
}
答案 7 :(得分:1)
使用where id = 2 and id = 3
将返回零结果,因为id = 2和id = 3是互斥的。 where id = 2 or id = 3
可以运作。
while (reader.Read()) { /*Do stuff with current row*/ }
可以用于迭代结果
答案 8 :(得分:1)
你需要循环,数据阅读器是你代码的最佳方式,例如:
SqlDataReader myReader = myCommand.ExecuteReader();
// Always call Read before accessing data.
while (myReader.Read()) {
Console.WriteLine(myReader.GetInt32(0) + ", " + myReader.GetString(1));
}
// always call Close when done reading.
myReader.Close();