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(他还没有足够的代表发表评论)哦,是的,我刚才添加了,但问题与图片所示相同。CallSqlConnection.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
}
}
}
}