【问题标题】:missing semicolon (;) at the end of sql statementsql 语句末尾缺少分号 (;)
【发布时间】:2013-09-23 09:56:33
【问题描述】:

我正在使用访问数据库并且我得到这个奇怪的错误......

sql 语句末尾缺少分号...

p.s 我尝试输入分号,但同样的事情......再次出错...... 请帮忙。

这是代码,错误从 Insert Into Statement 开始:

oleDbConnection1.Open();
        Int32 sasia_aktuale;
        Int32 sasia_e_shtuar = Convert.ToInt32(textBox1.Text.Trim());
        string kerkesa = "select * from magazina where emri = '"+listBox1.SelectedItem+"'";
        OleDbCommand komanda = new OleDbCommand(kerkesa, oleDbConnection1);
        OleDbDataReader lexo = komanda.ExecuteReader();
        lexo.Read();
        sasia_aktuale = Convert.ToInt32(lexo.GetValue(2).ToString());
        lexo.Close();
        Int32 sasia_totale = sasia_aktuale + sasia_e_shtuar;
        oleDbDataAdapter1.InsertCommand.CommandText =
            "insert into magazina(sasia) values('" + sasia_totale + "') where emri= '" + listBox1.SelectedItem + "'";
        oleDbDataAdapter1.InsertCommand.ExecuteNonQuery();
        MessageBox.Show("Sasia per produktin " + listBox1.SelectedItem + " u shtua me sukses!", "Sasia u shtua");
        oleDbConnection1.Close();

【问题讨论】:

  • 请大家研究一下“sql注入”和“参数化”
  • 我尝试...但没有。我不问我是否在 sql 文档上找到解决方案。这就是我问的原因。无论如何,谢谢。

标签: c# sql ms-access


【解决方案1】:

您将WHERE 子句与INSERT 语句混合在一起,两者不能一起使用:

oleDbDataAdapter1.InsertCommand.CommandText =
        "insert into magazina(sasia) values('" + sasia_totale + "')";

您的意思是UPDATE 声明吗?

我还建议您查找 SQL 注入,并使用 SqlParameters 来构建您的查询。您的代码目前非常不安全。

我可以看到您正在执行UPDATE 命令。 INSERT SQL 命令只会插入你给它的任何东西。下面是一个UPDATE 命令示例,它使用SqlParameters 来帮助避免SQL 注入,尽管这是未经测试的,因为我显然无法访问您的设置(我也没有使用IDE 执行此操作):

var updateCommand = new OleDbCommand("UPDATE magazina SET sasia = @sasia_totale WHERE emri = @emri");
updateCommand.Parameters.AddWithValue("@sasia_totale", sasia_totale);
updateCommand.Parameters.AddWithValue("@emri", listBox1.SelectedItem.ToString());
oleDbDataAdapter1.UpdateCommand = updateCommand;
oleDbDataAdapter1.UpdateCommand.ExecuteNonQuery();

【讨论】:

  • 好的,非常感谢您的回答,但是,我不想在没有 Where 子句的情况下插入数据,希望在数据库中非常特定的字段中插入数据。对不起我的英语不好,希望你理解和帮助。谢谢
  • 您是更新一行,还是插入 一个全新的?
  • 是的兄弟,我想修改一个指定的行,但不是所有的行,这就是为什么我想要一个 Where 子句来指定哪一行。谢谢
  • 我已经编辑了我的答案给你看。 UPDATE 查询是您想要的,毕竟您要更新特定行特定条件变为真。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-16
  • 2019-04-18
相关资源
最近更新 更多