我正在使用具有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()行?如果选择,为什么可以在调试器中看到该数据?
因此,答案是从date参数中删除长度。这就是我在复制和粘贴而不注意到该问题时所得到的。即使它正在返回数据,显然数据读取器也认为没有数据。感谢那些建议修复的人。