继续收到无效的列名称“用户名”

本文关键字:用户名 用户 无效 继续 | 更新日期: 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