【发布时间】: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??你应该 - 永远!