我有一个用户名db表,我正在尝试连接以比较用户名/通行证。
这是我的代码,它不起作用,我做错了什么?
DataTable dt = null;
protected void btn_Click_Login(object sender, EventArgs e)
{
string query = string.Format("SELECT * FROM Users WHERE Username='{0}' AND Password='{1}'", txtUsername.Text, txtPassword.Text);
using (SqlConnection c = new SqlConnection(ConfigurationManager.ConnectionStrings["RBConnectionString"].ConnectionString))
{
c.Open();
using (SqlDataAdapter a = new SqlDataAdapter(query, c))
{
DataTable t = new DataTable();
a.Fill(t);
}
}
if (dt.Rows.Count > 0)
{
Session["Username"] = txtUsername.Text;
Session["Password"] = txtPassword.Text;
Response.Redirect("main.aspx");
lblError.Text = "success";
}
else
{
lblError.Text = "Wrong Username/Password combination";
}
}
}
答案 0 :(得分:1)
尝试创建一个SqlCommand来保存您的查询。
SqlCommand cmd = new SqlCommand(query, c);
using (SqlDataAdapter a = new SqlDataAdapter(cmd))
{
DataTable t = new DataTable();
a.Fill(t);
}
我不是百分之百确定这是你的问题,但是在我以前使用ADO.NET的日子里(在L2SQL / EF之前,确实是黑暗的日子),我似乎记得DataTable和SqlDataAdapter的问题。 / p>
根据我的记忆 - 您无法使用基于原始查询字符串的SqlDataAdapter填充DataTable - 您需要使用SqlCommand。但我相信这可以用DataSet完成。
因此,要么更改为SqlCommand,要么更改为DataSet。
答案 1 :(得分:1)
很可能你使用了错误的数据表来检查没有返回的行。
检查数据表的t和dt实例。
答案 2 :(得分:1)
您填写t
:
DataTable t = new DataTable();
a.Fill(t);
但请阅读dt
:
if (dt.Rows.Count > 0)
答案 3 :(得分:1)
我决定尝试数据阅读器并使其正常工作:
protected void btn_Click_Login(object sender, EventArgs e)
{
SqlConnection conn = new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["RbConnectionString"].ConnectionString);
conn.Open();
string queryString = "SELECT * FROM [Users] WHERE Username=@username AND Password= @password";
SqlCommand command = new SqlCommand(queryString, conn);
command.Parameters.AddWithValue("@username", txtUsername.Text);
command.Parameters.AddWithValue("@password", txtPassword.Text);
SqlDataReader reader = null;
reader = command.ExecuteReader();
if (reader.Read())
{
Session["Username"] = txtUsername.Text;
Session["Password"] = txtPassword.Text;
Response.Redirect("main.aspx");
}
else
{
lblError.Visible = true;
lblError.Text = "Incorrect Username/Password Combination";
}
conn.Close();
}
答案 4 :(得分:0)
你得到的错误不明确。但我觉得你的联系是开放的,永远不会关闭。试试
c.Close();