SqlDataReader意外返回null

本文关键字:null 返回 意外 SqlDataReader | 更新日期: 2023-09-27 18:03:23

我有一个简单的连接到一个不工作的SQL Server。我正试图使用c#中的SqlDataReader从它读取数据。

代码如下:

bool ok = false;
SqlConnection con = new SqlConnection();
con.ConnectionString = @"********";
SqlCommand cmd = new SqlCommand();
cmd.Parameters.AddWithValue("@a", uname);
cmd.Parameters.AddWithValue("@b", pass);
cmd.CommandText = @"SELECT username FROM admins WHERE pass='@b'";
cmd.Connection = con;
SqlDataReader r;
con.Open();
r = cmd.ExecuteReader();
r.Read();
string n;
n = r.GetString(0);
if (n != null)
{
    ok = true;
}
con.Close();
if (ok)
{
    Session["admin"] = uname;
    Response.Redirect("admin_page.aspx");
}
else
{
    eror.Text = "An eror occured";
    Response.Redirect("index.aspx#work");
}

注意:上面代码串中的"uname"answers"pass"绝对不能为空。

注#2:我确实尝试在while循环中运行r.read()(即使不可能有多个行)->相同的结果。

我尝试在分步模式下运行此代码,并且它似乎在这一行中断:

n = r.GetString(0);

类型为'System '的异常。InvalidOperationException'在System.Data.dll中发生,但未在用户代码中处理

附加信息:当没有数据存在时,尝试读取无效。

我有点迷路了。我知道可能是我错过了一个简单的东西,我只是找不到它。什么好主意吗?

SqlDataReader意外返回null

除了Amit观察到一个未使用的参数之外,您还错误地使用了参数

cmd.CommandText = @"SELECT username FROM admins WHERE pass='@b'";

的值不应该有引号,所以:

cmd.CommandText = @"SELECT username FROM admins WHERE pass=@b";

参数将知道它是一个VARCHAR

您没有正确使用SqlDataReader

如果您想知道是否存在具有正确用户名和密码的用户,您的查询可能应该是:SELECT 1 FROM admins WHERE username=@a AND pass=@b

一旦完成,因为你不关心选择的值是什么(你只关心有一个返回的行…)使用如下命令:

r = cmd.ExecuteReader();
ok = r.HasRows;