C# SqlDataReader 仅检索一行

标签 c# sql-server

我有一个问题,我列出了 100 多名学生,但阅读器仅检索表中的最后一个学生。

string selectQuery = "SELECT * FROM Students WHERE firstName = @first AND lastName = @last";

using (SqlCommand sqlCommand = new SqlCommand(selectQuery, sqlConnection))
{
    sqlCommand.Parameters.Add("@first", SqlDbType.VarChar);
    sqlCommand.Parameters.Add("@last", SqlDbType.VarChar);

    foreach (Student student in studentList)
    {
        sqlCommand.Parameters["@first"].Value = student.first;
        sqlCommand.Parameters["@last"].Value = student.last;
    }

    using (SqlDataReader sqlReader = sqlCommand.ExecuteReader())
    {
        while (sqlReader.Read())
        {
            Console.WriteLine(sqlReader["firstName"].ToString());
            Console.WriteLine(sqlReader["lastName"].ToString());
        }
    }
}

最佳答案

如果您想检索所有学生的值,那么您需要foreach Student循环内执行SQL: p>

string selectQuery = "SELECT * FROM Students WHERE firstName = @first AND lastName = @last";

using (SqlCommand sqlCommand = new SqlCommand(selectQuery, sqlConnection))
{
    sqlCommand.Parameters.Add("@first", SqlDbType.VarChar);
    sqlCommand.Parameters.Add("@last", SqlDbType.VarChar);

    foreach (Student student in studentList)
    {
        sqlCommand.Parameters["@first"].Value = student.first;
        sqlCommand.Parameters["@last"].Value = student.last;

        using (SqlDataReader sqlReader = sqlCommand.ExecuteReader())
        {
             while (sqlReader.Read())
             {
                 Console.WriteLine(sqlReader["firstName"].ToString());
                 Console.WriteLine(sqlReader["lastName"].ToString());
             }
        }
    }
}

但这确实没有多大意义......你真正想要实现什么?您可以按名字和姓氏进行搜索 - 您从 studentList 中提供 - 但随后您也只输出您检索到的名字和姓氏 - 这与相同你已经通过了 - 那么为什么还要访问数据库呢?

更新: 正如 @PatrickArtner 正确评论的那样 - 创建和处置 100 个 SqlDataReader 实例并不理想。最好将此选择过程粘贴到具有单个 SELECTtable-valued parameter 的存储过程中。它将保存 100 个(或更多)学生 ID 或信息,您可以根据这些 ID 或信息选择学生,然后使用 单个 从 C# 中的存储过程中迭代结果集SqlDataReader 对象。

关于C# SqlDataReader 仅检索一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48840099/

相关文章:

sql - T-SQL 分组依据和子查询

c# - 从 View 模型绑定(bind)到 ListView 项目点击属性

c# - 使用 ASP.NET 和 C# 将 csv 文件导入 SQL Server

python - 在 sqlalchemy 中执行存储过程

c# - 跨多个相关表进行批量插入?

SQL 检查时间是否出现在某些时间段之间

c# - 正则表达式以匹配多个字符串并向后看

c# - Json.Net:如何忽略反序列化 JSON 的数组中的空元素

c# - SerialPort输入输出缓冲区一样吗?

c# - Linq to Entities 与 Linq to Objects 性能问题