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# Visual Studio 2012中web登录表单处理中出现异常_C#_Ado.net - Fatal编程技术网

C# Visual Studio 2012中web登录表单处理中出现异常

C# Visual Studio 2012中web登录表单处理中出现异常,c#,ado.net,C#,Ado.net,我正在尝试创建一个咖啡店管理阶段的登录页面。我知道在成功登录时如何链接到主窗体,但在处理请求时遇到异常 private void btnLogin_Click(object sender, EventArgs e) { string UserName, Password; UserName = txtUserName.Text; Password = txtPassword.Text; LoginByUsingRunTimeObject(UserName, Pas

我正在尝试创建一个咖啡店管理阶段的登录页面。我知道在成功登录时如何链接到主窗体,但在处理请求时遇到异常

private void btnLogin_Click(object sender, EventArgs e)
{
    string UserName, Password;
    UserName = txtUserName.Text;
    Password = txtPassword.Text;
    LoginByUsingRunTimeObject(UserName, Password);        
}

private void LoginByUsingRunTimeObject(string UserName, string Password)
{
    string connstr = Project304_1.Properties.Settings.Default._20121600ConnectionString;
    SqlConnection conn = new SqlConnection(connstr);
    SqlCommand cmd = new SqlCommand("Select * t304_users From where userName = @UserName and password = @Password");
    cmd.Parameters.AddWithValue("@UserName", UserName);
    cmd.Parameters.AddWithValue("@Password", Password);
    SqlDataReader rdr;
    conn.Open();
    rdr = cmd.ExecuteReader();
    DataTable dt = new DataTable("Users");
    dt.Load(rdr);
    if (dt.Rows.Count == 1)
    {
        frmMain main = new frmMain();
        if (dt.Rows[0][8].ToString() == "admin")
        {

        }

        else if (dt.Rows[0][8].ToString() == "staff")
        {

        }
        main.Show();
        this.Hide();
    }
    else
    {

    }
    conn.Close();
    conn.Dispose();
    cmd.Dispose();
}
但是当我运行它时,我得到以下错误:

无效操作异常

ExecuteReader:尚未初始化连接属性


您没有设置
SqlCommand
的连接。将构造函数更改为

按照您的方式,
SqlCommand
SqlConnection
之间没有关联

我还修复了user@petelids评论中建议的语法

这里有足够多的小东西,我将在编写代码时重新发布代码:

string connstr = Project304_1.Properties.Settings.Default._20121600ConnectionString;

using (SqlConnection conn = new SqlConnection(connstr))
{
    conn.Open();

    using (SqlCommand cmd = new SqlCommand("SELECT * FROM t304_users WHERE userName = @UserName AND password = @Password", conn))
    {
        cmd.Parameters.AddWithValue("@UserName", UserName);
        cmd.Parameters.AddWithValue("@Password", Password);

        using (var rdr = cmd.ExecuteReader())
        {
            DataTable dt = new DataTable("Users");
            dt.Load(rdr);
            if (dt.Rows.Count == 1)
            {
                frmMain main = new frmMain();
                if (dt.Rows[0][8].ToString() == "admin") // fix this to use a string indexer and not numeric
                {
                    // handle this
                }
                else if (dt.Rows[0][8].ToString() == "staff") // fix this to use a string indexer and not numeric
                {
                    // handle this
                }

                main.Show();
                this.Hide();
            }
            else
            {
                // handle this
            }
        }
    }
}

但是发生了一些问题
。我们猜不出这个问题是什么-你能详细说明一下,或者向我们展示一些错误消息和堆栈跟踪吗?请查看内置的成员资格和角色提供程序,假设你使用ASP.NET如何在此处添加图片?@user3487875你需要一定的声誉才能做到这一点。只需添加一个链接,我们中的一位将为您制作一个图像。“在未使用一些
salt
hashing
之前,不要将密码直接存储在数据库中。存储密码的一个很好的方法是存储两个值:
Salt
,然后对您的密码进行Salt,然后对其进行散列并存储散列后的密码。然后,当用户尝试登录时,您将检索salt和他们使用的密码,并对其进行哈希运算,看看它是否与您的哈希密码值相同。”——@Khaltazar(他还没有足够的代表发表评论)哦,是的,我刚才添加了,但问题与图片所示相同。Call
SqlConnection.Open()
在您创建命令之前。@user3487875我为您清理了代码并编辑了我的答案。虽然现在我可以阅读了,但您可能需要小心使用
Form.Show()
/
Form.Hide()
模式。这很好,但如果屏幕上出现越来越多的消耗内存的隐藏表单,你可能会陷入困境。你可能想花点时间将该模式移到更高的层次,无论是谁显示
。嘿,Matthew Haugen,我如何查看有关我登录的帐户的配置文件?我可以吗需要创建一个新问题吗?@user3487875我完全不知道你的意思,但可能。我会看看你这样做时我是否能帮你。确保包括你已经尝试过的内容以及发生的错误,假设有人这样做了。
string connstr = Project304_1.Properties.Settings.Default._20121600ConnectionString;

using (SqlConnection conn = new SqlConnection(connstr))
{
    conn.Open();

    using (SqlCommand cmd = new SqlCommand("SELECT * FROM t304_users WHERE userName = @UserName AND password = @Password", conn))
    {
        cmd.Parameters.AddWithValue("@UserName", UserName);
        cmd.Parameters.AddWithValue("@Password", Password);

        using (var rdr = cmd.ExecuteReader())
        {
            DataTable dt = new DataTable("Users");
            dt.Load(rdr);
            if (dt.Rows.Count == 1)
            {
                frmMain main = new frmMain();
                if (dt.Rows[0][8].ToString() == "admin") // fix this to use a string indexer and not numeric
                {
                    // handle this
                }
                else if (dt.Rows[0][8].ToString() == "staff") // fix this to use a string indexer and not numeric
                {
                    // handle this
                }

                main.Show();
                this.Hide();
            }
            else
            {
                // handle this
            }
        }
    }
}