使用SQL C#从列名为User Id的每一行检索单元格值

问题描述 投票:1回答:2

我正在尝试为列名为UserId的每一行获取单元格值,并将表名称称为NewUsers并将它们添加到Dictionary / List<T> / Array

很抱歉丢失了我没试过的代码。

using (SqlConnection conn = new SqlConnection(conString))
{
    conn.Open();
    using (SqlCommand cmd = new SqlCommand("SELECT UserId,Status FROM NewUsers", conn))
    {
        using (SqlDataReader reader = cmd.ExecuteReader())
        {
            // looking for username and status in database check if is dealer or admin or unknown
            if (reader.Read() || reader.HasRows)
            {
                int i = 0;
                var UserIds = reader["UserId"].ToString();
                foreach (var _userID in UserIds)
                {
                    Console.WriteLine(_userID);
                }
            }
        }
    }
}
c# sql ado.net
2个回答
1
投票

在你目前的方法......

List<int> userIds = new List<int>();  //Have to declare your list in which you can store all userid's

using (SqlConnection conn = new SqlConnection(conString))
{
    conn.Open();
    using (SqlCommand cmd = new SqlCommand("SELECT UserId, Status FROM NewUsers", conn))
    {
        using (SqlDataReader reader = cmd.ExecuteReader())
        {
            while (reader.Read())
            {
                userIds.Add(Convert.ToInt32(reader["UserId"].ToString()));
            }
        }
    }
}

你必须了解ADO的工作,为了访问我们必须迭代SqlDataReader的行,所以我们使用while和read直到它完成所有行。在while循环中,我们有访问当前行,现在我们可以从当前行读取列值并将其添加到我们的c#list(userIds)。


1
投票

我们可以进一步清理它:

var userIds = new List<int>();
using (var conn = new SqlConnection(conString))
using (var cmd = new SqlCommand("SELECT UserId,Status FROM NewUsers", conn))
{
    conn.Open();
    using (var reader = cmd.ExecuteReader())
    {
        while(reader.Read())
        {
            userIds.Add((int)reader["UserId"]);
        }
    }
}

我特别想指出将ToString()调用改为(int)演员。

如果数据库列已经是整数类型,那么ADO.Net已经处理了转换为C#int。调用ToString()会将您已经拥有的整数转换为字符串,这是一个位置感知调用,因此这是一个比它看起来更昂贵和复杂的过程。然后我们再次转换回整数,这又涉及一个令人惊讶的复杂和昂贵的解析过程。但是我们已经有了一个整数!

因此,删除那个小的ToString()调用对于性能来说可能是一个非常大的胜利,特别是当我们意识到我们为(可能很大的)结果集中的每个记录保存这项工作时。

© www.soinside.com 2019 - 2024. All rights reserved.