【问题标题】: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 来处理您的Connection 和Command。例如;
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。