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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用SQL C#从列名为User Id的每一行检索单元格值相关的知识,希望对你有一定的参考价值。

我正在尝试为列名为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);
                }
            }
        }
    }
}
答案

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

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)。

另一答案

我们可以进一步清理它:

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()调用对于性能来说可能是一个非常大的胜利,特别是当我们意识到我们为(可能很大的)结果集中的每个记录保存这项工作时。

以上是关于使用SQL C#从列名为User Id的每一行检索单元格值的主要内容,如果未能解决你的问题,请参考以下文章

SQL - 如何为每个用户检索 5 个最近的评论

使用窗口函数根据另一列从列中检索值

如何从列中检索 HTML 标记

如何使用 SQL Server 在一行中检索特定 id 的多条记录

为 Microsoft sql server 视图中的每一行分配 ID

T-SQL谜题:将表的每一行作为内联函数的输入传递,并使用UNION ALL开发新的堆栈数据集