在C#中使用SQL更新访问数据库 - 日期问题

时间:2017-07-29 18:56:52

标签: c# sql ms-access

我是一个带有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();

1 个答案:

答案 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