Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么DataReader会给出;枚举未产生任何结果;?_C#_Sql_Sql Server - Fatal编程技术网

C# 为什么DataReader会给出;枚举未产生任何结果;?

C# 为什么DataReader会给出;枚举未产生任何结果;?,c#,sql,sql-server,C#,Sql,Sql Server,我使用的是一个非常简单的存储过程,它有两个参数。然后它会填充一个DataReader,但是当我运行代码时,DataReader抛出一个错误,说“枚举未产生任何结果”,尽管它通过了reader.Read()行 我的函数作为参数传递给email。然后建立连接: SqlConnection con = new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["IdesignTriviaConnectio

我使用的是一个非常简单的存储过程,它有两个参数。然后它会填充一个DataReader,但是当我运行代码时,DataReader抛出一个错误,说“枚举未产生任何结果”,尽管它通过了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;
                        }
                    }
                }
如上所述,存储过程在query analyzer中运行良好,我甚至使用了调试器来查看它是否实际返回了以下预期值:


那么我在这里哪里出了问题?为什么,如果datareader无法枚举任何数据,它会使其通过reader.Read()行吗?如果我这样选择,为什么我能够在调试器中看到这些数据?

因此,答案是从日期参数中删除长度。这就是我在复制和粘贴时没有注意到的问题。即使返回数据,显然datareader认为没有数据。感谢那些建议修复的人

我把列名拼错了,所以犯了这个错误。我从

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

那么,不要再犯那个错误了


因此,首先最容易检查的是,列的所有拼写。祝你好运

reader
上的调试器中是否有手表,或者可以在代码之外枚举读取器的东西?是否可以显示更多代码,最后一行
long Completed=reader.GetInt32(2)之后是否有任何内容?我们需要看到整个
while
循环。此外,您没有使用
块将读卡器放入
,也没有使用
SqlConnection
,如果在代码正常工作后使用
块将这两个代码放入
中,这将导致性能问题。哪一行引发异常?错误来自代码还是调试器?进程返回多少个结果集?程序是否使用
设置NOCOUNT ON
string stn_nm = _rdr["STATION_NAME"].ToString(); //correct