c# - 如何使用 C# 更新密码?
问题描述
我找不到我的问题。谁能帮我检查一下。我是 C# 的新手。
public void Btnchange_Click(object sender, EventArgs args)
MySqlConnection con = new MySqlConnection("server=localhost;user id=root;persistsecurityinfo=True;database=user;password=1234");
MySqlDataAdapter sda = new MySqlDataAdapter("select Password from user.register where Password='" + textoldpassword.Text + "'", con);
DataTable dt = new DataTable();
sda.Fill(dt);
if (dt.Rows.Count.ToString() == "1")
{
if (textnewpassword.Text == textconfirmpassword.Text)
{
con.Open();
MySqlCommand cmd = new MySqlCommand("update user.register set Password ='" + textconfirmpassword.Text + "' where Password ='" + textoldpassword.Text + "'", con);
cmd.ExecuteNonQuery();
con.Close();
lblmsg.Text = "Succesfully Updated";
lblmsg.ForeColor = Color.Green;
}
else
{
lblmsg.Text = "New password and confirm password should be same!";
}
我希望它可以更新和更改我的密码。
解决方案
您的代码中有许多(大部分)小错误:
- 在你的 sql 表中使用某种 Id 字段
- 永远不要像您那样进行更新(更新该字段等于...的字段)
- 创建自己的类并将查询结果绑定到该类
- 当一个类实现 IDisposable 接口时,总是使用关键字'using'
- 永远不要在 sql 查询中连接用户字符串!!!SQL注入!!!总是使用参数化的 sql 查询
这是您的表单的一个简单示例。假设您的 user.register 表具有以下列: - Id - 用户名 - 密码
现在让我们创建你自己的类(也许就在你的按钮点击事件下,所以这次它可以是私有的):
private class MyUser { public int Id { get; set; } public string Username { get; set; } public string Password { get; set; } }
然后您的按钮单击事件应如下所示:
private void Btnchange_Click(object sender, EventArgs e) { if (!textnewpassword.Text.Trim().Equals(textconfirmpassword.Text.Trim())) { throw new ArgumentException("New password and confirm password should be same!"); } List<MyUser> myUsers = new List<MyUser>(); using (MySqlConnection con = new MySqlConnection( "server=localhost;user id=root;persistsecurityinfo=True;database=user;password=1234")) { using (MySqlCommand cmd = new MySqlCommand("select * from user.register where Username=@user and Password=@pass", con)) { cmd.Parameters.AddWithValue("@user", textusername.Text.Trim()); cmd.Parameters.AddWithValue("@pass", textoldpassword.Text.Trim()); if (cmd.Connection.State != ConnectionState.Open) cmd.Connection.Open(); using (MySqlDataReader dr = cmd.ExecuteReader()) { while (dr.Read()) { myUsers.Add(new MyUser { Id = (int)dr["Id"], Username = dr["Username"].ToString(), Password = dr["Password"].ToString() }); } } if (cmd.Connection.State == ConnectionState.Open) cmd.Connection.Close(); } if (!myUsers.Any()) { throw new ArgumentException("No users found with the given username/password pair!"); } if (myUsers.Count != 1) { throw new ArgumentException("More than 1 user has the same username and password in the database!"); } MyUser user = myUsers.First(); user.Password = textnewpassword.Text.Trim(); using (MySqlCommand cmd = new MySqlCommand("update user.register set Password=@pass where Id=@id")) { cmd.Parameters.AddWithValue("@pass", user.Password); cmd.Parameters.AddWithValue("@id", user.Id); if (cmd.Connection.State != ConnectionState.Open) cmd.Connection.Open(); cmd.ExecuteNonQuery(); if (cmd.Connection.State == ConnectionState.Open) cmd.Connection.Close(); } } }
...等等。
推荐阅读
- jquery - React 中的软滚动顶升
- java - Java 扫描程序无法在循环中正常工作
- javascript - 删除 jQuery 和 JavaScript 中包含特定文本的所有标签
- microsoft-cognitive - 学术搜索 API 不返回任何实体
- node.js - Sequelize bulkCreate 内部事务不返回 id
- c# - Devexpress - 更改下拉列表中的值
- java - Http请求上的Spring Kafka监听器
- kubernetes - 与 Pod 一起自动创建服务
- html - 如何在同一个句子中应用不同的文本样式?
- python - 熊猫从多列的行中获取新列(其中条目是列表)