c#通过DateTime.Parse访问DateTime UPDATE

时间:2016-05-16 06:07:40

标签: c# datetime sql-update access

OleDbConnection con = new OleDbConnection(constring)
con.Open()
cmdstring = "UPDATE table SET date="+DateTime.Parse(txtdate.Text).ToString("dd/MM/yyyy") + " WHERE id = 1"
OleDbCommand cmd = new OleDbCommand(cmdstring,con)
cmd.ExecuteNonQuery()
con.Close()

当我尝试在我的一个表单中使用此代码更新表时,它完美地完成了。但在另一种形式我使用相同的代码更新相同的表和相同的列,但我得到一个令人困惑的错误。 语法错误(缺少运算符)

示例:txtbox上的日期:17.1.1987

错误日期:17.1.198

DateTime.Parse没问题。我尝试了它的回归。它返回4位数年份。但是在更新访问数据库时发生了什么?

...问候

2 个答案:

答案 0 :(得分:2)

始终使用参数化查询。特别是当您在Access中处理日期时,您可能会遇到很多麻烦。

    DateTime dt;
    bool canParse = DateTime.TryParseExact(txtdate.Text,
                                      "dd/MM/yyyy",CultureInfo.InvariantCulture, 
                                      DateTimeStyles.None, 
                                      out dt);
    if(canParse)
    {
         string sQuery = "UPDATE table SET date = @pdate WHERE ID = @pid";
         OleDbCommand updateCmd = new OleDbCommand(sQuery, Conn);
         updateCmd.Parameters.Add("@pdate", OleDbType.Date).Value = dt;
         updateCmd.Parameters.Add("@pid", OleDbType.Integer).Value = 1; 
         int rowsAffected = updateCmd.ExecuteNonQuery();
         /* Use the result from operation for some notification */
    }

答案 1 :(得分:1)

cmdstring = "UPDATE table SET date='"+DateTime.Parse(txtdate.Text).ToString("dd/MM/yyyy") + "' WHERE id = 1"

您需要在日期值之前和之后使用单引号。