gpt4 book ai didi

C# SqlDataReader 只检索一行

转载 作者:行者123 更新时间:2023-11-30 23:05:25 26 4
gpt4 key购买 nike

我有一个问题,我列出了 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::

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 或信息,您可以根据这些信息选择学生,然后使用 单个 在 C# 中迭代​​该存储过程的结果集SqlDataReader 对象。

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

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com