我使用UPDATE
语句来更新日期/时间字段。我使用Date.Now.ToShortDateString()
语句。
当我在调试模式下运行时,我看到该值例如是“18/09/2010”。但是,当我打开数据库时,我看到插入的值是“09/18/2010”。
有谁知道我怎么解决它?我稍后在我的GUI中显示这个日期字段,所以我需要它是正确的。
答案 0 :(得分:0)
使用参数而不是连接字符串。对于日期/时间参数,请将参数类型设置为日期/时间,然后传递Date.Now
而不是Date.Now.ToShortDateString()
。
以下是一个例子:
public class Program
{
static void Main(string[] args)
{
OleDbConnection conn =
new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=[put path to mdb here...]");
conn.Open();
OleDbCommand cmd = new OleDbCommand(
"update Table1 set dateField = ? where textField like ?",
conn);
cmd.Parameters.Add("@dateField", OleDbType.Date).Value = DateTime.Now;
// IN THIS EXAMPLE, THE RECORD BEING UPDATED WILL HAVE "TEST"
// IN THE FIELD NAMED: TEXTFIELD
cmd.Parameters.Add("@textField", OleDbType.VarChar).Value = "test";
cmd.ExecuteNonQuery();
conn.Close();
Console.WriteLine();
Console.WriteLine("Press enter to exit.");
Console.ReadLine();
}
}
当您打开MDB文件时,您可以确认该字段已更改为DateTime.Now。
答案 1 :(得分:0)
Access中的日期格式由Windows中的区域设置,查看控制面板,区域和语言设置,除非您希望通过字段(列)和控件的格式属性设置各个字段的格式。
通过表单和查询设计窗口进行更新时,你有一定的自由度,在这种情况下你很幸运18不是一个月,所以大多数格式都是明确的,但是,在VBA中,我怀疑,在c#中,你应该使用美国日期格式(月,日,年)或不明确的格式,如年,月,日。我通常更喜欢年,月,日超过美国约会,因为他们对更多人更清楚。
答案 2 :(得分:-1)
这是您的应用程序的文化问题。据我所知,访问不支持改变其数据库的文化,这太糟糕了。将应用程序的文化更改为en-US,甚至更好地使用UTC日期,并在要显示时将它们转换为应用程序中的正确文化。
答案 3 :(得分:-1)
始终以长格式明确提及月份部分传递日期。例如,2010年1月24日将其传递为24 / jan / 2010。在这种情况下,MS访问不会混淆月份部分,并将成功处理日期。之后,显示的日期将与您预期的一样。请记住,这也适用于数据插入,更新和日期提取。它适用于所有文化,因为MS Access不必担心哪个部分是日期值传递的月份部分