C#从SQL获取所有名称并作为列表返回

时间:2016-02-10 18:07:52

标签: c# sql-server

我正在尝试更熟悉SQL和C#,所以我正在开发一个简单的应用程序,现在我有一个填充的SQL数据库,但是我希望从我的人员表中获取所有名称并将它们放入在一个组合框中,但是当我尝试获取所有名称时,我只能获得表中的第一个名称。 这就是我尝试这样做的方式。

using (SqlCommand sqlCommand = new SqlCommand("SELECT [Name] FROM [Persons].[dbo].[Test]", sqlConnection))
{
    var names = sqlCommand.ExecuteScalar();
}

4 个答案:

答案 0 :(得分:4)

您实际上想要使用SqlDataReader这样的内容:

var names = new List<string>();
using (SqlCommand sqlCommand = new SqlCommand("SELECT [Name] FROM [Persons].[dbo].[Test]", sqlConnection))
{
    using(var reader = sqlCommand.ExecuteReader())
    {
       while(reader.Read())
       {
          names.Add(reader["Name"].ToString());
       }
    }
}

请注意,ExecuteScalar仅获取第一个返回行的第一列。

答案 1 :(得分:0)

而不是ExecuteScalar执行此操作:

array_equal

答案 2 :(得分:0)

改用ExecuteReader;确保在循环之外声明List,否则在需要时它将超出范围。

var names = new List<string>();
using (SqlCommand sqlCommand = new SqlCommand("SELECT [Name] FROM [Persons].[dbo].[Test]", sqlConnection))
{
    var reader = command.ExecuteReader();
    while (reader.Read())
    {
        names.Add(reader[0]);
    }
}

答案 3 :(得分:0)

sqlCommand.ExecuteScalar()会返回单个值,即标量的含义。您需要声明SqlDataReader rdr;并通过rdr = sqlCommand.ExecuteReader()对其进行初始化。然后,您需要使用while循环遍历行,该循环检查读取器是否有更多行可通过while(rdr.Read())读取。这将是a)通过返回值告诉你是否有任何剩余的未读行(因此它是你的while条件)和b)使读者前进到第一个未读行。

我强烈推荐以下文章让您快速了解在C#中使用SqlCommand: http://www.dotnetperls.com/sqlcommand