【问题标题】:Syntax error in query expression查询表达式中的语法错误
【发布时间】:2014-03-22 14:22:31
【问题描述】:
string q = "UPDATE tableAbsensi SET Absen_keluar =('"+(DateTime.Now.ToString("hh:mm"))+"') WHERE ID ='"+ idkaryawantxt.Text.ToString() + "' AND Tanggal ='" + (DateTime.Now.ToString("MM-dd-yyyy"));

我认为我的语法有错误,你们能帮帮我吗?谢谢

这是错误的图片: http://sadpanda.us/images/1889033-X8SIZZN.jpg

【问题讨论】:

  • 查看您提供的代码,您并没有在末尾关闭单引号

标签: c# sql ms-access-2010


【解决方案1】:

您似乎缺少报价。这个:

AND Tanggal ='" + (DateTime.Now.ToString("MM-dd-yyyy"));

应该是

AND Tanggal ='" + (DateTime.Now.ToString("MM-dd-yyyy") + "');

但您确实应该使用参数来防止此类错误以及SQL injection

【讨论】:

    【解决方案2】:

    请不要那样做!

    你不应该在你的 sql 查询中使用字符串连接。始终使用parameterized queries。这种字符串连接对SQL Injection 攻击开放。

    使用这种连接,您可能会忘记使用一些逗号、引号、括号等。

    还可以使用using statement 来处理您的ConnectionCommand。例如;

    using(OleDbConnection con = new OleDbConnection(ConnectionString))
    using(OleDbCommand cmd = com.CreateCommand())
    {
       string s = "UPDATE tableAbsensi SET Absen_keluar=? WHERE ID=? AND Tanggal=?";
       cmd.CommandText = s;
       cmd.Parameters.AddWithValue("@absen", DateTime.Now.ToString("hh:mm"));
       cmd.Parameters.AddWithValue("@id", idkaryawantxt.Text.ToString());   
       cmd.Parameters.AddWithValue("@tanggal",  DateTime.Now.ToString("MM-dd-yyyy")); 
       cmd.ExecuteNonQuery();  
    }
    

    【讨论】:

      【解决方案3】:

      不要使用字符串连接将值插入 SQL 代码。总是使用参数,这样由格式化引起的问题就消失了。要了解为什么以及如何使用参数,check this out

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-12-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多