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]不为空)--