【问题标题】:Why is DataReader giving “Enumeration Yielded No Results”?为什么 DataReader 给出“枚举没有结果”?
【发布时间】:2020-05-18 11:05:19
【问题描述】:

我的 SQL db 存储过程返回结果,但 datareader 显示“Enumeration Yielded No Results”?

这是我的代码:

var sqlFastProd = String.Format("Getnpidataforencryption");
                using (SqlConnection conn = new SqlConnection(connectionString.ToString()))
                {
                    SqlCommand myCommand = new SqlCommand(sqlFastProd, conn);
                    myCommand.CommandType = System.Data.CommandType.StoredProcedure;
                    myCommand.Parameters.Add(new SqlParameter("@StartingId", startId));
                    myCommand.Parameters.Add(new SqlParameter("@countOfRecords", CountofRecords));
                    conn.Open();
                    SqlDataReader reader = myCommand.ExecuteReader();
                    List<DataElement> dataElements = new List<DataElement>();
                    var recordsFetchTime = DateTime.Now;
                    TimeSpan t = serviceStartTime - recordsFetchTime;
                                       if (reader.HasRows)
                    {
                        while (reader.Read())
                        {
                        …
                        }
                    }
                 }

存储过程

创建过程Getnpida

taforencryption @StartingId     BIGINT,--1       
                                         @countOfRecords BIGINT -- 101       
AS       
  BEGIN       
      SELECT textid,       
             originaltextdata as textdata,       
             keyname       
      FROM   npidataencryption       
      WHERE IsEncrypted is null and id BETWEEN @StartingId AND @countOfRecords      
  END 

need help, thanks in adv

ance:)

【问题讨论】:

    标签: c# ado.net sqldatareader datareader


    【解决方案1】:

    这主要是因为您的存储过程没有返回带有这些输入值的数据。您可能想使用HasRows 属性检查阅读器是否有任何行

    if(!reader.HasRows)
    {
        // return empty response model
    }
    

    看起来您已经在检查下面的行(来自您发布的代码)。那么在这种情况下,我相信您肯定会在调试时从调试器中收到该错误

    if (reader.HasRows)
     {
       while (reader.Read())
    

    如果不是这种情况,那么您也应该发布您的程序代码以获得更多信息。

    【讨论】:

    • Stored proc 正在返回数据,Hasrow 也是如此,但是当我看到结果视图时,那里没有任何数据。显示?在每一行。
    • 如果没有数据,它会跳过while循环,但奇怪的是hasrows是真的,我不明白
    • 如果 hasrows 为真并且它正在跳过 if(hasrows) 问题中的代码与您正在执行的代码不同。
    • 不,它不会跳过 if(reader.hasrow),因为 hasrow 为 true,它会进入内部,但是 while (reader.read() 是 fasle,因此它正在退出 while 循环。
    • 最奇怪的是我在过去 3 周执行相同的代码它工作正常,但今天我修改了连接字符串,并指向不同的数据库,连接字符串是正确的并且连接是打开的没有任何错误。 conn.open() 为真
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-22
    • 1970-01-01
    相关资源
    最近更新 更多