C# - 插入语句中的 oledb 异常语法错误 (0x80040E14)
C# - oledb exception syntax error (0x80040E14) in insert into statement
嗨,我遇到了一个问题:我的 OleDbCommand 不工作。
代码元素:
private void Btn_Click(object sender, EventArgs e)
{
try
{
connection.Open();
OleDbCommand cmd = new OleDbCommand();
cmd.Connection = connection;
cmd.CommandText = "insert into Account (Nick,Password) values ('" + NickEnter.Text + "', '" + PassEnter.Text + "');";
cmd.ExecuteNonQuery();
}
catch (Exception ex)
{
MessageBox.Show("Error! | " + ex, "Error!");
}
}
- 您正在为列名使用保留字。您需要使用方括号对它们进行转义。
- 您还应该为您的值使用参数。这可以防止 sql 注入(在可能的情况下),并确保带有单引号的值不会破坏语句。
- 最后我注意到您有一个名为
password
的字段和一个纯文本值,您永远不应将密码存储为纯文本。而是存储密码的单向哈希。您可以使用许多库。
private void Btn_Click(object sender, EventArgs e)
{
try
{
connection.Open();
OleDbCommand cmd = new OleDbCommand();
cmd.Connection = connection;
cmd.CommandText = "INSERT INTO [Account] ([Nick],[Password]) values (?,?);";
// note that order is critical here
command.Parameters.Add(new OleDbParameter("@nick", OleDbType.VarChar)).Value = NickEnter.Text;
command.Parameters.Add(new OleDbParameter("@password", OleDbType.VarChar)).Value = PassEnter.Text;
cmd.ExecuteNonQuery();
}
catch (Exception ex)
{
MessageBox.Show("Error! | " + ex, "Error!");
}
}
嗨,我遇到了一个问题:我的 OleDbCommand 不工作。
代码元素:
private void Btn_Click(object sender, EventArgs e)
{
try
{
connection.Open();
OleDbCommand cmd = new OleDbCommand();
cmd.Connection = connection;
cmd.CommandText = "insert into Account (Nick,Password) values ('" + NickEnter.Text + "', '" + PassEnter.Text + "');";
cmd.ExecuteNonQuery();
}
catch (Exception ex)
{
MessageBox.Show("Error! | " + ex, "Error!");
}
}
- 您正在为列名使用保留字。您需要使用方括号对它们进行转义。
- 您还应该为您的值使用参数。这可以防止 sql 注入(在可能的情况下),并确保带有单引号的值不会破坏语句。
- 最后我注意到您有一个名为
password
的字段和一个纯文本值,您永远不应将密码存储为纯文本。而是存储密码的单向哈希。您可以使用许多库。
private void Btn_Click(object sender, EventArgs e)
{
try
{
connection.Open();
OleDbCommand cmd = new OleDbCommand();
cmd.Connection = connection;
cmd.CommandText = "INSERT INTO [Account] ([Nick],[Password]) values (?,?);";
// note that order is critical here
command.Parameters.Add(new OleDbParameter("@nick", OleDbType.VarChar)).Value = NickEnter.Text;
command.Parameters.Add(new OleDbParameter("@password", OleDbType.VarChar)).Value = PassEnter.Text;
cmd.ExecuteNonQuery();
}
catch (Exception ex)
{
MessageBox.Show("Error! | " + ex, "Error!");
}
}