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

Mic*_*ony 5 c# sql sql-server

我正在使用一个非常简单的存储过程,它有 2 个参数。然后它填满了一个 DataReader,但是当我运行代码时,DataReader 抛出一个错误,说“枚举没有结果”,尽管它通过了 reader.Read() 行。

我的函数通过电子邮件作为参数传递。然后它建立连接:

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;
Run Code Online (Sandbox Code Playgroud)

在此之后,它打开连接并建立阅读器:

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;
                        }
                    }
                }
Run Code Online (Sandbox Code Playgroud)

如上所述,存储过程在查询分析器中完美运行,我什至使用调试器查看它实际上返回的预期值是:

那么我哪里出错了?为什么,如果 datareader 未能枚举任何数据,它是否会通过 reader.Read() 行?如果我愿意,为什么我可以在调试器中看到这些数据?

Mic*_*ony 4

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