使用来自数据库的用户名和密码的登录页面没有完全正常工作,看不出原因

时间:2016-12-12 14:17:06

标签: c# sql asp.net visual-studio

我正在使用Visual Studio在C#中创建一个asp.net Web应用程序。我有一个父母的注册页面,它将信息存储在我创建的数据库表中。我现在需要创建一个登录页面,如果输入的用户名和密码正确,用户将被重定向到付款页面。

到目前为止我所做的工作在一定程度上。我将显示我的代码,以及主要错误的屏幕截图。如果有人能指出我哪里出错了,我会非常感激。

username + password = CORRECT - 我收到“密码正确”文字

username + password = BOTH WRONG - 我收到“用户名不正确”文字

用户名(不正确)+密码(正确) - 我收到“用户名不正确”文字

用户名(CORRECT)+密码(NOTcorrect) - 我收到此错误(见截图)I get this error

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
using System.Configuration;
using System.Data.SqlClient;

namespace Coursework
{
public partial class Login : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {

    }

    protected void loginButton_Click(object sender, EventArgs e)
    {
        SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["newregDBConnectionString"].ConnectionString);
        conn.Open();
        string checkUser = "select count(*) from parent where parentID='" + userText.Text + "'";
        SqlCommand com = new SqlCommand(checkUser, conn);
        int temp = Convert.ToInt32(com.ExecuteScalar().ToString());
        conn.Close();
        if (temp == 1)
        {
            conn.Open();
            string checkPassword = "select password from parent where password='" + passText.Text + "'";
            SqlCommand passCom = new SqlCommand(checkPassword, conn);
            string password = passCom.ExecuteScalar().ToString().Replace(" ","");
            if(password == passText.Text)
            {
                Session["New"] = userText.Text;
                Response.Write("Password is correct");
            }
            else
            {
                Response.Write("Password is not correct");
            }          
        }
        else
        {
            Response.Write("Username is not correct");
        }
        conn.Close();
    }
}

}

1 个答案:

答案 0 :(得分:4)

ExecuteScalar返回对象

public override object ExecuteScalar()

因此您需要检查null

var obj = passCom.ExecuteScalar();
string password = obj?.ToString().Trim();

同时开始使用SqlCommand.Parameters保护您免受Sql injection

的侵害