使用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 Server 在一行中检索特定 id 的多条记录