为什么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删除参数中的长度。这是我在没有注意到这个问题的情况下复制和粘贴的。即使它正在返回数据,显然数据读取器也认为没有数据。感谢那些建议修人。 |
|
|
|
|
|