我是一个带有c#的n00b,已经使用了一段时间的vba并加紧了。
我有这段代码:
OleDbCommand sqlcom = new OleDbCommand("UPDATE tblpack SET packeduser = 1 AND packeddate ='" + DateTime.Now.ToString("dd/MM/yyyy HH:mm:ss") + "' WHERE packid = " + packid, con);
我知道它没有参数化,这将是我的下一步,我现在真的只是学习基础知识。
我的问题是没有日期部分,更新sql工作正常。
使用日期部分,没有错误,但是sql最终没有触发。
我已经停止执行非查询并且sql看起来很好...... 我在Access中的日期字段设置为空白,但我已经尝试了"一般日期"也没有运气。
任何想法!?/
更新: 抱歉你是100%正确的我即使学习也不应该在安全方面吝啬。 我已经重写为参数化,它正在工作。 我相信我的问题而不是,在SQL中(它是凌晨3点)。 Datetime.now实际上适用于Access,而不必转换为字符串。我不知道为什么会这样。我已经阅读了很多关于需要转换的内容!
OleDbConnection con = new OleDbConnection(ConfigurationManager.ConnectionStrings["connectionString"].ConnectionString);
string strpacked = "UPDATE tblpack SET packeduser = 1, packeddate = ? WHERE packid = ?";
OleDbDataAdapter dataadapter = new OleDbDataAdapter();
OleDbCommand sqlcom = new OleDbCommand(strpacked, con);
sqlcom.Parameters.Add("?", OleDbType.Date, 5).Value = DateTime.Now;
sqlcom.Parameters.Add("?", OleDbType.Integer, 5).Value = packid;
dataadapter.SelectCommand = sqlcom;
con.Open();
sqlcom.ExecuteNonQuery();
row.Cells["clnpackeduser"].Value = "GA";
con.Close();
答案 0 :(得分:0)
MS Jet(MS Access数据库引擎)日期格式为:#MM/DD/YYYY hh:mm:ss#
。
因此,您必须更改代码:
OleDbCommand sqlcom = new OleDbCommand("UPDATE tblpack SET packeduser = 1, packeddate =" + DateTime.Now.ToString("#MM/dd/yyyy HH:mm:ss#") + " WHERE packid = " + packid, con);
请注意,我已从示例中删除了'
。
在您的情况下,MS Jet无法解析日期字符串,并且日期为空白。
更新:
您必须在SET子句中使用,
而不是AND
。