【发布时间】:2017-12-13 11:49:07
【问题描述】:
我是 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;
}
以下异常:
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');
我该如何解决这个问题?
【问题讨论】:
-
使用分析器检查正在从 C# 项目执行的确切查询。
-
在您的底部查询中,您选择了 nome 而不是 name,这是一个错字吗?还有 password vs senha.
-
@EvZ 这不是与数据库相关的异常,而是.net 异常。可能是由于在访问其字段之前未在数据读取器中调用
.Read()。检查 styxs 的答案。 -
您是否希望通过该查询获得不止一行?您可以简单地使用 JOIN 而不是带有子查询的 IN 并使用 ExecuteScalar。也不要为了重新抛出异常而捕获异常。