select *仅返回一个值

时间:2011-08-18 11:57:25

标签: sql-server select ado.net

我想从表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中检查了多个值,查询运行应该如此。

提前致谢。

9 个答案:

答案 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();