【问题标题】:C# - oledb exception syntax error (0x80040E14) in insert into statementC# - 插入语句中的 oledb 异常语法错误 (0x80040E14)
【发布时间】:2018-04-17 16:26:22
【问题描述】:

您好,我有一个问题:我的 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!");
        }
    }

【问题讨论】:

  • 欢迎来到 SO,请您阅读以下内容:stackoverflow.com/help/how-to-ask 当您说不工作时,发生了什么?
  • 使用参数而不是连接字符串。这是一个安全问题。
  • 请解释您所说的“不工作”是什么意思。你采取了哪些步骤,会发生什么?您遇到什么错误或发生了什么意外事件?
  • 您的代码容易受到SQL injection的攻击
  • 1.我读了但我不明白stackoverflow.com/questions/28911465/… 2. 怎么办? 3. 标题有错误

标签: c# oledb


【解决方案1】:
  • 您正在使用保留字作为列名。您需要使用方括号对这些内容进行转义。
  • 您还应该为您的值使用参数。这可以防止 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!");
    }
}

【讨论】:

  • 非常感谢你!我不能给你 +1 没有 15 声望:[
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-20
  • 1970-01-01
相关资源
最近更新 更多