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

时间:2017-12-13 11:49:07

标签: c# sql npgsql

我是C#和Npgsql的新手,我正在尝试在某个表中进行搜索,但我得到了一个例外。

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;
}

Bellow例外:

  

System.InvalidOperationException:'没有行可用'

我做了同样的事情,但使用PgAdmin4,我有一行。正是我想要的。

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

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:2)

您必须在dr.Read();之间拨打电话:

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

答案 1 :(得分:1)

我建议您使用while来检查HasRows后跟.Read(),以便代码如下:

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