继续收到无效的列名称“用户名”
本文关键字:用户名 用户 无效 继续 | 更新日期: 2023-09-27 18:30:16
我的数据库中有确切的名称,但我仍然不断收到标题的错误。
System.Data中发生了类型为"System.Data.SqlClient.SqlException"的异常.dll但未在用户代码中处理
图片链接 : https://i.stack.imgur.com/cxlna.png
其他信息:列名称"用户名"无效。
protected void Button1_Click(object sender, EventArgs e)
{
SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["ERegistrationConnectionString"].ConnectionString);
conn.Open();
string checkuser = "select count(*)from Employer where Username='" + TextBoxELUsername.Text + "'";
SqlCommand com = new SqlCommand(checkuser, conn);
int temp = Convert.ToInt32(com.ExecuteScalar().ToString());
conn.Close();
if (temp == 1)
{
conn.Open();
string checkPasswordQuery = "select password from Employer where Username='" + TextBoxELUsername.Text + "'";
SqlCommand passComm = new SqlCommand(checkPasswordQuery, conn);
string password = passComm.ExecuteScalar().ToString().Replace(" ","");
if (password == TextBoxLoginPassword.Text)
{
Session["New"] = TextBoxELUsername.Text;
Response.Write("Password is Correct");
}
else
{
Response.Write("Password Incorrect");
}
}
else
{
Response.Write("Username Incorrect");
}
}
您的 SQL 无效。您忘记了count(*)
和from
关键字之间的空格。试试这个:
select count(*) from Employer where Username=
此外,您应该将 sql 更改为不允许 sql 注入并使用 Parameters
对象
在 Sql 语句检索 count(*) 的情况下,您确实应该参数化该语句以防止 sql 注入。
string checkuser = @"select count(*)from Employer where Username= ?";
SqlCommand com = new SqlCommand(checkuser, conn);
comm.Parameters.AddWithValue("?", TextBoxELUsername.Text );
此外,请尝试以这种方式返回变量 temp。
int temp = (int)comm.ExecuteScalar();
除此之外,我会尝试创建包含在 IF 语句中的第二个连接。这听起来可能很奇怪,但是在触发IF语句之前,可以将该连接从内存中剥离出来,反过来程序不知道您要尝试打开的连接。
您可以通过创建单个 sql 语句来避免第二个连接
string checkuser = @"select count(*)from Employer where Username= ? and password = ?";
SqlCommand com = new SqlCommand(checkuser, conn);
comm.Parameters.AddWithValue("?", TextBoxELUsername.Text );
comm.Parameters.AddWithValue("?", TextBoxLoginPassword.Text );
您的计数返回仅在用户名和密码正确的情况下存在。
您可能还希望使用以下代码强制查询区分大小写
alter database your_database collate Latin1_General_CS_AS