Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# SqlDataReader结果视图返回notdefined somthing_C#_Sql Server - Fatal编程技术网

C# SqlDataReader结果视图返回notdefined somthing

C# SqlDataReader结果视图返回notdefined somthing,c#,sql-server,C#,Sql Server,我的代码有点问题 我尝试从本地SQL Server检索数据。连接正确,存储过程也正确。但是当我从SqlDataReader读取行时,它是空的。但是,当我观看SqlDataReader时,有什么东西?在里面,但不是结果 SQL查询在SQLServerManagementStudio中运行良好 这是我的密码: List<Customer> customers = new List<Customer>(); using (SqlConnection conn = new Sq

我的代码有点问题

我尝试从本地SQL Server检索数据。连接正确,存储过程也正确。但是当我从
SqlDataReader
读取行时,它是空的。但是,当我观看
SqlDataReader
时,有什么东西?在里面,但不是结果

SQL查询在SQLServerManagementStudio中运行良好

这是我的密码:

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"]
                          });                        
        }
    }
}
列出客户=新建列表();
使用(SqlConnection conn=newsqlconnection())
{
conn.ConnectionString=“服务器=DESKTOP-U8E1S5I;数据库=Queue;受信任的连接=true”;
conn.Open();
SqlCommand=newsqlcommand(“GetCustomers”,康涅狄格州);
使用(SqlDataReader=command.ExecuteReader())
{
while(reader.Read())
{
客户。添加(新客户)
{
名称=(字符串)读取器[“CustomerName”],
WaitingNumber=(int?)读卡器[“CustomerNumber”],
EnterTime=(DateTime?)读卡器[“CustomerNumber”],
状态=(int)读卡器[“CustomerStatus”]
});                        
}
}
}
结果是“枚举未产生结果”,其中两行包含?:(断点在reader.read()之前)


谢谢您的帮助。

您需要指定您正在使用存储过程,请参见下文

SqlCommand command = new SqlCommand("GetCustomers", conn);
command.CommandType = CommandType.StoredProcedure;


默认情况下,
SqlCommand
的属性定义为
CommandType.Text
,即席
sql
使用该属性。您必须通过在命令上设置
CommandType
来指定您正在使用
存储过程。对于示例:

SqlCommand command = new SqlCommand("GetCustomers", conn);
command.CommandType = CommandType.StoredProcedure;

不要忘记添加名称空间
系统。数据

尝试迭代
读取器
,这是一个坏主意-除此之外,当您这样做时,您已经消耗了数据;本质上:即使在调试器中查看这一点也会破坏该值。所以当前在没有断点的情况下发生了什么;您是否已到达
reader.Read()
?它是否深入到内部以获得尽可能多的
客户。添加
?注意:严格来说,最好设置
command.CommandType=CommandType.storedProcess
在这里,但只要您不传递参数,您通常都能逃脱惩罚po:您使用了
CustomerNumber
两次。它可能不是一个
int
DateTime
。(这与您最初的错误无关,但这是您将遇到的下一个问题。)@Jeroenmoster事实上,我强烈怀疑您在这里“赚大钱”,真正的问题是在读取
EnterTime
时出现无效强制转换异常-我进一步怀疑OP正在尝试调试代码,以找出这不起作用的原因,并通过调试断点意外地消耗数据view@jeroen这是下一件事,但我没有输入命令类型,所以结果只是空的。虽然我同意你的观点,这应该被指定:它没有抛出异常这一事实意味着这可能不是直接的问题感谢@MarcGravel的评论。我想问你为什么(在对这个问题的评论中)说迭代
SqlDataReader
是个坏主意?我知道它仍然连接在数据库上,但是在从结果集中获取数据时,有没有其他好的方法来保持性能?谢谢。我的意思是,特别是在调试器中,这是一个坏主意,因为它会不可逆转地更改数据;由于IDE扩展到一个序列的末尾,这意味着一旦您在IDE中查看了它一次,数据就不再存在了,而我同意您的观点,这应该被指定:它没有抛出异常的事实意味着这可能不是直接的问题
SqlCommand command = new SqlCommand("GetCustomers", conn);
command.CommandType = CommandType.StoredProcedure;