c# - 如何使用 SqlDataReader 获取多条记录?

标签 c# asp.net .net sql-server visual-studio

这是我的网络方法,我想将所有 session 添加到我的 allmeeting 列表中,然后我想返回它并通过 kendo grid 接收

List<DefMeetingDTO> AllDefCompany = new List<DefMeetingDTO>();
List<DefMeetingDTO> f = new List<DefMeetingDTO>();

SqlDataReader reader = cmd.ExecuteReader();

if (reader.HasRows)
{
    DefMeetingDTO d = new DefMeetingDTO();
    int ji = reader.FieldCount;

    do
    {
         while (reader.Read())
         {
              //for(int i = 0 ; i < ji ; i++) {
              if (!reader.IsDBNull(reader.GetOrdinal("md_id")))
              {
                   d.md_id = Convert.ToInt32(reader["md_id"]) as int? ?? default(int);
              }
              else
              {
                   d.md_id = 0;
              }

              if (!reader.IsDBNull(reader.GetOrdinal("md_visitor_name")))
              {
                   d.md_visitor_name = (string)(reader["md_visitor_name"]);// as DateTime? ?? default(DateTime);
              }
              else
              {
                   // d.m_datetime = null;
              }

              if (!reader.IsDBNull(reader.GetOrdinal("md_visitor_cell")))
              {
                   d.md_visitor_cell = (reader["md_visitor_cell"]).ToString();// as string? ?? default(string);
              }

              if (!reader.IsDBNull(reader.GetOrdinal("md_visitor_company")))
              {
                   d.md_visitor_company = (string)reader["md_visitor_company"];
              }

              if (!reader.IsDBNull(reader.GetOrdinal("purpose_name")))
              {
                   d.purpose_name = (string)reader["purpose_name"];
              }

              if (!reader.IsDBNull(reader.GetOrdinal("m_datetime")))
              {
                   d.m_datetime = Convert.ToDateTime(reader["m_datetime"]) as DateTime? ?? default(DateTime);
              }

              AllDefCompany.Add(d);
          }
     }

     while(reader.NextResult());                        
}

我的 SQL 查询返回结果为选中的 4 行

   10878    |   Wasim Riaz  | 0300449436     | Jade | N/A   | NULL
   71123    |   bb          | +9232531256    | F    | mee   | 2015-09-03
   71124    |   CC          | +923218531256  | Fb   | N/A   | 2015-09-03
   71125    |   DD          | +923218531256  | Gb   | N/A   | 2015-09-03

但是 SqlDataReader 每次只迭代到第一行,不会去第二行添加 allmeetinglist() 连接超时

最佳答案

我不确定您为什么要使用 Do-While 循环。您可以像这样简单地使用 While 循环:-

List<DefMeetingDTO>   AllDefCompany = new List<DefMeetingDTO>();
SqlDataReader reader = cmd.ExecuteReader();
while (reader.Read())
{
    DefMeetingDTO d = new DefMeetingDTO();
    if (!reader.IsDBNull(reader.GetOrdinal("md_id")))
    {
          d.md_id = Convert.ToInt32(reader["md_id"]) as int? ?? default(int);
    }
    else
    {
          d.md_id = 0;
    }
    AllDefCompany.Add(d);
}

请注意,Read()无论如何都会将数据读取器推进到下一条记录,因此没有必要使用 NextResult 再次执行此操作。另外,请注意,没有必要检查 reader.HasRows,因为如果没有更多行要获取,Read 将返回 false。

关于c# - 如何使用 SqlDataReader 获取多条记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32390962/

相关文章:

c# - 如何找到非 exe 程序的 C# 入口点?

c# - 插入后计算的主键不会在 EF Core 实体中更新

c# - Json.Net 在使用我的 JsonConverter 之前自行转换

c# - 启动和关闭 SQL 连接 - 在开始和结束时还是每次需要时?

c# - 访问数组项?

c# - WinRT 中的透明组合框

c# - 使用 DevExpress 或 Infragistics 将 HTML 或 PDF 转换为 RTF/DOC 或将 HTML/PDF 转换为图像

asp.net - 为什么 `ardalis/CleanArchitecture` 引用 FastEndpoints 而不是它自己的 `ardalis/ApiEndpoints`

c# - 我可以在创建对象之前计算属性吗?在构造函数中?

asp.net - QueryString 不接受 & - 需要