为什么DataReader给出“枚举没有结果”?

本文关键字:结果 枚举 DataReader 给出 为什么 | 更新日期: 2023-09-27 17:52:35

我使用一个非常简单的存储过程,它有2个参数。然后它填充了一个DataReader,但是当我运行代码时,DataReader抛出了一个错误,说"Enumeration没有产生结果",尽管它已经通过了reader.Read()行。

我的函数作为参数传递email。然后建立连接:

SqlConnection con = new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["IdesignTriviaConnection"].ConnectionString);
            SqlCommand cmd = new SqlCommand("usp_GetCurrentLink", con);
            SqlDataReader reader;
            cmd.CommandType = CommandType.StoredProcedure;
            cmd.Parameters.Add("@date", SqlDbType.DateTime, 100).Value = DateTime.Today;
            cmd.Parameters.Add("@email", SqlDbType.VarChar, 100).Value = email;

之后打开连接并建立阅读器:

try
            {
                if (cmd.Connection.State == ConnectionState.Closed)
                {
                    cmd.Connection.Open();
                }
                reader = cmd.ExecuteReader();
                while (reader.Read())
                {
                    long LinkID = reader.GetInt32(0);
                    String URL = reader.GetString(1);
                    long Completed = reader.GetInt32(2);
if (LinkID == 0)
                    {
                        link = "0";
                    }
                    else
                    {
                        if (Completed == 1)
                        {
                            link = "1";
                        }
                        else
                        {
                            link = URL;
                        }
                    }
                }
如前所述,存储过程在查询分析器中完美地工作,我甚至使用了调试器来查看它实际上返回了预期的值:

我哪里错了?为什么,如果数据读取器没有枚举任何数据,它会让它通过reader.Read()行吗?如果我选择,为什么我能够在调试器中看到该数据?

为什么DataReader给出“枚举没有结果”?

所以,答案是从日期参数中删除长度。这就是我复制粘贴而没有注意到这个问题的结果。即使它正在返回数据,显然数据读取器认为没有数据。感谢那些建议修复的人。

我得到了拼写错误的columnName。我从

string stn_nm = _rdr["STN_NAME"].ToString();

string stn_nm = _rdr["STATION_NAME"].ToString(); //correct 

那么,没有更多的错误!

所以,首先要检查的最简单的事情是,所有列的拼写。好运!