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位数年份。但是在更新访问数据库时发生了什么?
...问候
答案 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"
您需要在日期值之前和之后使用单引号。