Проблема DateTime в SQL Compact - PullRequest
2 голосов
/ 09 марта 2010

Я использую Sql Compact3.5 в качестве моей БД с C # .NET. В разных системах я получаю формат datetime по-разному. В Windows XP он извлекает дату и время в формате: MM-дд-гггг ЧЧ: мм: сс, а в Медиа-центре - в формате: MM / дд / гггг чч: м: сс. Есть ли способ сделать формат даты и времени свободным от культуры, или я могу установить формат даты и времени в sql compact, так что пусть это будет любой ПК, который будет использовать только этот формат ???

Пример:

//TimeOfCall is passed as String using the format DateTime.Now.ToString("MM-dd-yyyy HH:mm:ss");
using (SqlCeConnection con = new SqlCeConnection(ConString))
{
    using (SqlCeCommand SqlceCmd = new SqlCeCommand(
         "Insert into myreports(TimeOfCall,Status) values(?,?)", con))
    {
        if (con.State == ConnectionState.Closed)
            con.Open();
        SqlceCmd.Parameters.Add(new SqlCeParameter("@TimeOfCall", strTimeOfCall));
        SqlceCmd.Parameters.Add(new SqlCeParameter("@Status", strStatus));

        int RowsaAffected = SqlceCmd.ExecuteNonQuery();
        con.Close();
        return RowsaAffected;
    }
}

При обращении к записи запрос используется следующим образом:

//FromTime and ToTime are passeed in the same format as while storing
using (SqlCeConnection con = new SqlCeConnection(ConString))
{
    using (SqlCeDataAdapter SqlceDA = new SqlCeDataAdapter("Select TimeOfCall from myreports where TimeOfCall between '" + strFromTime + "' and '" + strToTime + "' order by TimeOfCall", con))
    {
        if (con.State == ConnectionState.Closed)
            con.Open();
        SqlceDA.Fill(dtReports);
        con.Close();
        return dtReports;
    }
}

Надеюсь, это понятно

1 Ответ

3 голосов
/ 10 марта 2010

Хорошо, из кода, вы в основном делаете неправильные вещи.

Хорошей новостью является то, что вы используете параметры - это совершенно верно - однако вам на самом деле не нужно преобразовывать дату в строку перед установкой значения параметра. *

Самое простое - изменить SqlceCmd.Parameters.Add(new SqlCeParameter("@TimeOfCall", strTimeOfCall)); на SqlceCmd.Parameters.AddWithValue("@TimeOfCall", timeOfCall));, где timeOfCall - это значение DateTime.

То же самое относится к статусу, если это не изначально строка.

Если вы хотите быть более явным в отношении типов, сначала создайте параметр, определяющий тип, а затем установите его.

Для вашего запроса выбора сделайте то же самое, замените конкатенацию строк параметрами @fromTime и @toTime и установите параметры непосредственно из соответствующих значений DateTime

...