【发布时间】:2018-03-28 12:20:43
【问题描述】:
我的代码有点问题。
我尝试从本地 SQL Server 检索数据。连接正确,存储过程也正确。但是当我从SqlDataReader 读取行时,它是空的。但是当我看SqlDataReader 时,有什么东西?里面,但不是结果。
SQL 查询在 SQL Server Management Studio 中运行良好。
这是我的代码:
List<Customer> customers = new List<Customer>();
using (SqlConnection conn = new SqlConnection())
{
conn.ConnectionString = "Server=DESKTOP-U8E1S5I;Database=Queue;Trusted_Connection=true";
conn.Open();
SqlCommand command = new SqlCommand("GetCustomers", conn);
using (SqlDataReader reader = command.ExecuteReader())
{
while (reader.Read())
{
customers.Add(new Customer
{
Name = (string)reader["CustomerName"],
WaitingNumber = (int?)reader["CustomerNumber"],
EnterTime = (DateTime?)reader["CustomerNumber"],
Status = (int)reader["CustomerStatus"]
});
}
}
}
结果是“Enumeration Yielded No Results”,其中两行包含 ?:(断点在 reader.read() 之前)
Enumeration Yielded No Results
感谢您的帮助。
【问题讨论】:
-
尝试迭代
reader是个坏主意——除此之外,当你这样做时,你已经消耗了数据;本质上:即使在调试器中查看这个也会破坏值。所以;当前没有断点会发生什么;你能到reader.Read()吗?它会进入内部以达到customers.Add吗?注意:严格来说,在这里设置command.CommandType = CommandType.StoredProcedure;是个好主意,但你通常会侥幸逃脱,只要你不传递参数 -
错字:您使用了两次
CustomerNumber。它可能不是int和DateTime。 (这与您最初的错误无关,但这是您接下来会遇到的问题。) -
@JeroenMostert 实际上,我强烈怀疑您在这里“赚到了钱”,并且 real 问题是在阅读
EnterTime时出现的无效转换异常 -我进一步怀疑 OP 正在尝试调试代码以找出其不起作用的原因,并且意外地通过调试断点视图消耗了数据 -
@jeroen 它是接下来的事情,但是主要我没有输入命令类型,所以结果只是空的。
标签: c# sql-server