Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么我的登录代码不起作用?_C#_Sql - Fatal编程技术网

C# 为什么我的登录代码不起作用?

C# 为什么我的登录代码不起作用?,c#,sql,C#,Sql,我正在制作一个用户登录程序,我的代码如下: private void button1_Click(object sender, EventArgs e) { try { string b = Convert.ToString(UserNameComboBox.SelectedItem); SqlConnection DataFind = new SqlConnection(@"Data Source=.\sqlexpress; Initial C

我正在制作一个用户登录程序,我的代码如下:

private void button1_Click(object sender, EventArgs e)
{
    try
    {

        string b = Convert.ToString(UserNameComboBox.SelectedItem);
        SqlConnection DataFind = new SqlConnection(@"Data Source=.\sqlexpress; Initial Catalog=PAYROLL MANAGEMENT SYSTEM;Integrated security=true;");
        DataFind.Open();

        SqlCommand dmd;
        dmd = new SqlCommand("SELECT COUNT(*) FROM LoginDetail where( (UserName=' " + b + "') AND (Password='" + Password.Text + "' ))", DataFind);
        dmd.ExecuteNonQuery();
        Int32 count = Convert.ToInt32(dmd.ExecuteScalar());

        DataFind.Close();
        SelectedRowNo.Text = count.ToString();
        if (count == 1)
        {
            Form1 s = new Form1();
            s.Show();
        }
        else
        {
            MessageBox.Show("Sorry You are not an authirized user");
        }
    }
    catch { MessageBox.Show("UserName or Password not valid"); }
}

它没有给我任何输出。虽然sql数据库中存在记录,但它表示未找到任何记录。我无法理解为什么我的程序无法工作。

在用户名之前还有一个额外的空格。移除它,它应该会工作

不过,请记住,你在这里做的事情或多或少都是错的。你很容易受到SQL注入的攻击想想当有人给你密码ab'时会发生什么;删除表用户;-,而且你正在数据库中存储清晰的密码,因此任何能够访问你的数据的人都可以获得你的所有用户密码。由于您对SQL注入开放,任何人都可以获取您的数据


你打错了。在包含用户名的变量b之前有一个空格,其中username='+b+'。。。这就是为什么您应该使用参数。在做任何其他事情之前,请阅读Sql注入和参数化查询。在那之后,阅读关于密码散列的内容,或者观察一下,你正在使用一个组合框让用户选择用户名——这就放弃了一半的安全性。在你给了别人你所有的用户名后,是什么阻止他们强行输入密码的呢?我删除了我的投票结果,原因很简单,因为我认为答案很重要。我想知道,如果将标题改为“如何使我的登录代码正常工作”或类似的内容,可能会进一步说明问题不仅仅在于额外的空间。密码后的额外空间实际上不会伤害任何东西,因为它超出了“charactersRight!更正了我的答案。你可以补充一点关于在存储密码之前对密码进行哈希处理的重要性。我做了,XKCD链接之前的最后一句话。