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中发生,但未在用户代码中处理
附加信息:当没有数据存在时,尝试读取无效。
我有点迷路了。我知道可能是我错过了一个简单的东西,我只是找不到它。什么好主意吗?
除了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;