我使用的是一个非常简单的存储过程,它有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;
之后打开连接并建立阅读器:
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;
}
}
}
如上所述,存储过程在查询分析器中运行良好,我甚至使用调试器来查看它实际上返回的预期值:
那我在哪里错了?为什么,如果datareader无法枚举任何数据,它是否通过reader.Read()行?如果我选择的话,为什么我能在调试器中看到这些数据?
答案 0 :(得分:3)
所以,答案是从date参数中删除长度。这就是我复制和粘贴所得到的,而不是注意到这个问题。即使它正在返回数据,显然datareader认为没有数据。感谢那些建议修复的人。
答案 1 :(得分:0)
我通过将columnName拼写错误得到了该错误。我从
string stn_nm = _rdr["STN_NAME"].ToString();
到
string stn_nm = _rdr["STATION_NAME"].ToString(); //correct
然后,不再出现该错误!
因此,最容易检查的是列的所有拼写。祝你好运!