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
}
我是 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
}