【问题标题】:MySqlexception was unhandled, Fatal error encountered during command executionMySqlexception 未处理,命令执行过程中遇到致命错误
【发布时间】:2017-02-06 23:25:17
【问题描述】:

我尝试在登录后向表 tbllogs 添加一些值,但出现错误

这是我的代码

if (ctr == 1)
{
    Data.con.Open();

    MetroMessageBox.Show(this, "Login Success!", "Welcome!", MessageBoxButtons.OK, MessageBoxIcon.Information);

    MySqlDataAdapter da = new MySqlDataAdapter("Select * From dbinfo.tbluser where UserName = '" + txtUser.Text + "' and UserPassword = '" + txtPass.Text + "'", Data.con);

    DataTable dt = new DataTable();
    da.Fill(dt);

    Data.UserID = dt.Rows[0][0].ToString();
    Data.UserName = dt.Rows[0][1].ToString();
    Data.UserLevel = dt.Rows[0][3].ToString();

    string SaveStr = "Insert into dbinfo.tbllogs (LogsUser, LogsPassword) Values (@LogsUser, @LogsPassword)";

    MySqlCommand SaveCmd = new MySqlCommand(SaveStr, Data.con);
    //SaveCmd.Parameters.AddWithValue("@LogsID", Data.UserID = dt.Rows[0][0].ToString());
    SaveCmd.Parameters.AddWithValue("@LogsName", txtUser.Text);
    SaveCmd.Parameters.AddWithValue("@LogsPassword", txtPass.Text);
    //SaveCmd.Parameters.AddWithValue("@LogsLevel", Data.UserLevel = dt.Rows[0][3].ToString());
    //SaveCmd.Parameters.AddWithValue("@LogsDateIN", timelabel.Text);

    SaveCmd.ExecuteNonQuery();
    Data.con.Close();

    LoadData();

    Menu frmMenu = new Menu();
    frmMenu.Show();

    this.Hide();
}

我试过换行

SaveCmd.Parameters.AddWithValue("@LogsName", txtUser.Text);

SaveCmd.Parameters.AddWithValue("@LogsName", Data.Password = dt.Rows[0][2].ToString()));

但这也没用。

如果这还不够,我会提供更多代码,提前致谢!

【问题讨论】:

  • 内部异常通常会提供更多信息。您永远不应该将密码存储为纯文本。为什么密码仍然被记录?
  • ?该命令需要一个名为 LogsUser 的参数。而且您不应该将密码存储为纯文本..
  • 进行谷歌搜索并阅读如何使用以及创建Parameterized Queries 并阅读如何使用using (){ } 构造
  • try-catch 块也可能不是一个坏主意.....
  • SQL Injection alert - 你应该将你的 SQL 语句连接在一起 - 使用 参数化查询 来避免 SQL 注入 - 你为什么不使用参数在您的MySqlDataAdapter??你应该 - 永远!

标签: c# mysql


【解决方案1】:

改变这一行:

   SaveCmd.Parameters.AddWithValue("@LogsName", txtUser.Text);

进入这个:

 SaveCmd.Parameters.AddWithValue("@LogsUser", txtUser.Text);

另外,正如其他人所提到的,您不应将密码记录为纯文本。

【讨论】:

  • 天哪,我没注意到,但是谢谢!
【解决方案2】:

sql查询和c#参数中的参数名应该相同

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-04-25
    • 1970-01-01
    • 2020-10-15
    • 2021-09-02
    • 1970-01-01
    • 2014-10-13
    • 1970-01-01
    相关资源
    最近更新 更多