C#使用SQL Server数据库登录不起作用

C#使用SQL Server数据库登录不起作用,c#,sql,sql-server,login,C#,Sql,Sql Server,Login,我需要打开一个新的表单,如果用户名和密码是正确的,但我不能让这个代码工作,如果我输入了正确的用户名或密码,它不会做任何事情 private void login_Click(object sender, EventArgs e) { try { string connection = @"Data Source=DX-PC;Initial Catalog=login;Integrated Security=True"; SqlConnection cn = n

我需要打开一个新的表单,如果用户名和密码是正确的,但我不能让这个代码工作,如果我输入了正确的用户名或密码,它不会做任何事情

private void login_Click(object sender, EventArgs e)
{
   try
   {
      string connection = @"Data Source=DX-PC;Initial Catalog=login;Integrated Security=True";
      SqlConnection cn = new SqlConnection(connection);

      cn.Open();

      string userText = user.Text;
      string passText = pass.Text;

      SqlCommand cmd = new SqlCommand("SELECT ISNULL(Username, '') AS Username, ISNULL(Password,'') AS Password FROM log WHERE Username = @username and Password = @password", cn);
      cmd.Parameters.Add(new SqlParameter("username", userText));
      cmd.Parameters.Add(new SqlParameter("password", passText));

      SqlDataReader dr = cmd.ExecuteReader();

      try
      {
          dr.Read();
          if (dr["Username"].ToString().Trim() == userText && dr["Password"].ToString().Trim() == passText)
          {
              MessageBox.Show("This message won't Display");
          }
      }
      catch
      {
          MessageBox.Show("Invalid Username or Password");
      }

      dr.Close();
      cn.Close();
   }
   catch (Exception ex)
   {
       MessageBox.Show(ex.Message);
   }
} 
试试这个代码

        cn.open
        MySqlDataAdapter LoginAdapter = new MySqlDataAdapter();
        dynamic CommandQuerry = @"SELECT * From users WHERE Username='" + UsernameField.Text + "'AND Password='" + PasswordField.Text + "';";
        MySqlCommand LoginCommand = new MySqlCommand(); //The Login Command
        MySqlDataReader LoginDataReader = default(MySqlDataReader); //Create a reader variable to check login details.

        if (cn.State == ConnectionState.Open)
        {
              LoginCommand.Connection = SelectedSchoolDB;
              LoginCommand.CommandText = CommandQuerry;
              LoginAdapter.SelectCommand = LoginCommand;

              LoginDataReader = LoginCommand.ExecuteReader();

              if (Convert.ToInt32(LoginDataReader.HasRows) == 0)
              {
                     DialogResult a = MessageBox.Show(@"Invalid username/password, please try again", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
              }
              else
              {
                     LoginDataReader.Close(); // Close The reader
                     This.FormName.Hide(); //Close the login form
                     Newform.ShowDialog(); //Show the new form
              }
cn.close()
}
希望此代码有帮助:)

尝试此代码

        cn.open
        MySqlDataAdapter LoginAdapter = new MySqlDataAdapter();
        dynamic CommandQuerry = @"SELECT * From users WHERE Username='" + UsernameField.Text + "'AND Password='" + PasswordField.Text + "';";
        MySqlCommand LoginCommand = new MySqlCommand(); //The Login Command
        MySqlDataReader LoginDataReader = default(MySqlDataReader); //Create a reader variable to check login details.

        if (cn.State == ConnectionState.Open)
        {
              LoginCommand.Connection = SelectedSchoolDB;
              LoginCommand.CommandText = CommandQuerry;
              LoginAdapter.SelectCommand = LoginCommand;

              LoginDataReader = LoginCommand.ExecuteReader();

              if (Convert.ToInt32(LoginDataReader.HasRows) == 0)
              {
                     DialogResult a = MessageBox.Show(@"Invalid username/password, please try again", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
              }
              else
              {
                     LoginDataReader.Close(); // Close The reader
                     This.FormName.Hide(); //Close the login form
                     Newform.ShowDialog(); //Show the new form
              }
cn.close()
}

希望这段代码有帮助:)

我认为问题在于:

                if (dr["Username"].ToString().Trim() == userText && dr["Password"].ToString().Trim() == passText)
                {

                    MessageBox.Show("This message won't Display");



                }
代码的一部分。尝试按如下方式添加一个else:

                if (dr["Username"].ToString().Trim() == userText && dr["Password"].ToString().Trim() == passText)
                {

                    MessageBox.Show("This message won't Display");



                } else {
                    MessageBox.Show(string.Format("{0}!={1}, {2}!={3}"
                        ,dr["Username"].ToString().Trim(),userText,
                         dr["Password"].ToString().Trim(),passText
                    );
                } 

您可能会发现您的问题。

我认为问题在于:

                if (dr["Username"].ToString().Trim() == userText && dr["Password"].ToString().Trim() == passText)
                {

                    MessageBox.Show("This message won't Display");



                }
代码的一部分。尝试按如下方式添加一个else:

                if (dr["Username"].ToString().Trim() == userText && dr["Password"].ToString().Trim() == passText)
                {

                    MessageBox.Show("This message won't Display");



                } else {
                    MessageBox.Show(string.Format("{0}!={1}, {2}!={3}"
                        ,dr["Username"].ToString().Trim(),userText,
                         dr["Password"].ToString().Trim(),passText
                    );
                } 


您可能会发现您的问题。

尽管您提供的代码容易受到SQL注入和XSS的攻击,但为了回答您的问题,SQL查询中筛选条件上的字符串COMAPRION不区分大小写,而上面的.NET代码则会区分大小写。

尽管您提供的代码容易受到SQL注入和XSS的攻击,但为了回答您的问题,SQL查询中筛选条件上的字符串COMAPRION是不区分大小写的,而上面的.NET代码是区分大小写的。

您是否收到任何错误?可能有十几个原因。您的
Initial Catalog=login
不存在。你会打字。您已经向数据库中添加了奇怪的值,为什么还要对来自数据库的字符串使用trim呢?它更可能对来自文本框的文本使用trim。不要加入这个俱乐部:你肯定有某种迹象表明某些东西不起作用。错误?例外?请分享…没有错误,如果我输入了错误的用户名或密码,连接会正常工作。出现无效的messagebox,唯一的问题是,如果我输入了正确的详细信息,“messagebox.Show(“此消息不会显示”);”将不会显示。对不起,如果我不清楚的话,我仍然是c#的新手。你有什么错误吗?可能有十几个原因。您的
Initial Catalog=login
不存在。你会打字。您已经向数据库中添加了奇怪的值,为什么还要对来自数据库的字符串使用trim呢?它更可能对来自文本框的文本使用trim。不要加入这个俱乐部:你肯定有某种迹象表明某些东西不起作用。错误?例外?请分享…没有错误,如果我输入了错误的用户名或密码,连接会正常工作。出现无效的messagebox,唯一的问题是,如果我输入了正确的详细信息,“messagebox.Show(“此消息不会显示”);”将不会显示。抱歉,如果我不清楚,我还是c的新手,如果您需要每个代码的解释,请告诉我。警告:sql注入危险above@spender你能再解释一下吗?怎么可能呢?如何预防呢?此外,我认为sql注入适用于网站,而不是C#应用程序sql注入是一个问题,无论您在哪里有未过滤的用户输入作为内联sql输入。在中,您可以让某人通过将要运行的用户名字段或密码字段输入SQL。尝试在UserNameField文本框中添加并键入以下内容:';创建表[dbo].[InjectionRules]([UserID][int]不为空)--如果您需要每个代码的解释,请告诉我。警告:sql注入危险above@spender你能再解释一下吗?怎么可能呢?如何预防呢?此外,我认为sql注入适用于网站,而不是C#应用程序sql注入是一个问题,无论您在哪里有未过滤的用户输入作为内联sql输入。在中,您可以让某人通过将要运行的用户名字段或密码字段输入SQL。尝试在UserNameField文本框中添加并键入以下内容:';创建表[dbo].[InjectionRules]([UserID][int]不为空)--