Доступ к базе данных, проблема поля даты / времени - PullRequest
1 голос
/ 12 октября 2010

Я использую оператор UPDATE для обновления поля Дата / Время.Я использую оператор Date.Now.ToShortDateString().

Когда я запускаю в режиме отладки, я вижу значение, например, «18/09/2010».Однако, когда я открываю базу данных, я вижу, что вставленное значение равно «18.09.2010».

Кто-нибудь знает, как я могу это исправить?Позже я отображаю это поле даты в моем графическом интерфейсе, поэтому мне нужно, чтобы оно было правильным.

Ответы [ 4 ]

0 голосов
/ 12 октября 2010

Всегда передавайте даты в явном упоминании части месяца в длинном формате. Например, на 24.01.2010 передайте его как 24 января 2010 года. В этом случае MS access не запутается в части месяца и успешно обработает дату. Позже отображаемая дата будет соответствовать вашим ожиданиям. Пожалуйста, помните, что это относится и к вставке данных, обновлению и извлечению даты. Это будет работать для всех культур, потому что MS Access не нужно беспокоиться о том, какая часть месяца является частью переданного значения даты

0 голосов
/ 12 октября 2010

Используйте параметры вместо объединения строк.Для параметра даты / времени установите тип параметра на дату / время и передайте 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.

0 голосов
/ 12 октября 2010

Формат даты в Access устанавливается в соответствии с локалью в Windows, посмотрите «Панель управления», «Регион» и «Языковые настройки», если только вы не хотите установить формат для отдельных полей через свойство format полей (столбцов) и элементов управления.

При обновлении через формы и окно конструктора запросов у вас есть некоторая широта, и в этом случае вам повезло, что 18 - это не месяц, поэтому большинство форматов однозначны, однако в VBA и, я подозреваю, в c # Вам следует использовать либо американский формат даты (месяц, день, год), либо однозначный формат, например год, месяц, день. я бы предпочел год, месяц, день, а не даты в США, потому что они понятнее большему количеству людей.

0 голосов
/ 12 октября 2010

Это проблема культуры вашего приложения. Слишком плохо, насколько я знаю, доступ не поддерживает изменение культуры его базы данных. Измените культуру приложения на en-US или даже лучше используйте даты UTC и преобразуйте их в нужную культуру в своем приложении, когда вы хотите их показать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...