SELECT 查询在 C# 方法中返回异常

SELECT query returning exception in C# method

我是 C# 和 Npgsql 的新手,我正在尝试在某个 table 中进行搜索,但出现异常。

public User Login(Account c)
{
    User usr = new User();
    using (NpgsqlConnection con = new NpgsqlConnection(strConnection))
    {
        try
        {
            con.Open();
            NpgsqlCommand command = new NpgsqlCommand();
            command.Connection = con;
            command.CommandText = "SELECT name FROM public.user WHERE c_id IN (SELECT id FROM public.account WHERE email=@Email AND password=@Password)";
            command.Parameters.AddWithValue("Email", c.Email);
            command.Parameters.AddWithValue("Password", c.Password);
            NpgsqlDataReader dr = command.ExecuteReader();

            if (dr.HasRows)
            {
                usr.Name = dr["name"].ToString();
            }

        }
        catch (Exception ex)
        {
            throw ex;
        }
    }    
    return usr;
}

下面是异常:

System.InvalidOperationException: 'No row is available'

我做了同样的事情,但使用的是 PgAdmin4,我得到了一条线。正是我想要得到的。

SELECT name FROM public.user WHERE c_id IN (SELECT id FROM public.account WHERE email='user05@gmail.com' AND password='user05');

我该如何解决这个问题?

你必须像这样在 dr.Read(); 时调用:

if (dr.HasRows)
{
    dr.Read();
    usr.Name = dr["name"].ToString();
}

我建议你使用 while 而不是检查 HasRows 然后是 .Read() 所以代码将是这样的:

while(dr.Read())
{
    usr.Name = dr["name"].ToString();
    // Assign rest of values if there any
}