我是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');
我该如何解决这个问题?
答案 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
}