回答

收藏

为什么DataReader给出“数字得出没有结果”?

技术问答 技术问答 267 人阅读 | 0 人回复 | 2023-09-12

我正在使用一个非常简单的存储过程,有两个参数。然后,它填充了一个DataReader,但是当我运行代码时,尽管DataReader经过了reader.Read()行,但它抛出一个错误,指出枚举没有结果。
2 m4 z1 s% k  W! ]# Z+ ?我的功能是通过电子邮件作为参数传递的。然后,它建立了连接:7 c/ l1 J% q- S) d$ J% {
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;之后,它将打开连接并建立读取器:9 A. N+ u2 e) ?6 n- a/ J( U8 h; l
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;                                                                                                          }                }如前所述,存储过程在查询分析器中运行完美,我甚至使用调试器来检查它实际返回的期望是:
0 J5 t% M; `1 [5 }1 W: l6 x+ Q我在哪里错了?为什么,如果datareader不能列举任何数据,它是否通过了reader.Read()行?如果选择,为什么能在调试器中看到数据?
6 E0 n, G  l" O1 D2 A0 D( @                                                                ' {. M# Z7 B1 L* J* M. K
    解决方案:                                                               
3 Y. |5 M  T# m4 @; D% F8 v1 l6 \, ^                                                                因此,答案是从date删除参数中的长度。这是我在没有注意到这个问题的情况下复制和粘贴的。即使它正在返回数据,显然数据读取器也认为没有数据。感谢那些建议修人。
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则