访问数据库,日期/时间字段问题

时间:2010-10-12 13:36:17

标签: c# ms-access

我使用UPDATE语句来更新日期/时间字段。我使用Date.Now.ToShortDateString()语句。

当我在调试模式下运行时,我看到该值例如是“18/09/2010”。但是,当我打开数据库时,我看到插入的值是“09/18/2010”。

有谁知道我怎么解决它?我稍后在我的GUI中显示这个日期字段,所以我需要它是正确的。

4 个答案:

答案 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不必担心哪个部分是日期值传递的月份部分

相关问题