istudent Ответов: 2

Как мне справиться с заданием и значение dbnull значение извлекать в промежуток времени?


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

Сотрудник может включать и выключать часы до того, как они пойдут на перерыв, и в этом случае я хотел бы вставить нулевое значение DB в свойства PostBreakClockIn и PostBreakClockOut.

Я присвоить значение типа TimeSpan значение null в эти свойства, но я не получаю ошибки, чтобы установить значение dbnull значение во время операции вставки.

Я также установил тип данных Time(7) в своей таблице БД и установил его в положение allow null.

Что я уже пробовал:

public int Id { get; set; }
        public int Day { get; set; }
        public string EmployeeName { get; set; }
        public TimeSpan? PreBreakClockIn { get; set; }
        public TimeSpan? PreBreakClockOut { get; set; }
        public TimeSpan? PostBreakClockIn { get; set; }
        public TimeSpan? PostBreakClockOut { get; set; }


using (SqlConnection con = new SqlConnection(cs))
           {
               using (SqlCommand cmd = new SqlCommand(query.ToString(), con))
               {
                   cmd.CommandType = System.Data.CommandType.Text;

                   if (update)
                   {
                       cmd.Parameters.AddWithValue("@Id", model.Id);
                   }
                   cmd.Parameters.AddWithValue("@EmployeeName", model.EmployeeName);
                   cmd.Parameters.AddWithValue("@Day", model.Day);
                   cmd.Parameters.AddWithValue("@PreBreakClockIn", model.PreBreakClockIn);
                   cmd.Parameters.AddWithValue("@PreBreakClockOut", model.PreBreakClockOut);
                   cmd.Parameters.AddWithValue("@PostBreakClockIn", model.PostBreakClockIn);
                   cmd.Parameters.AddWithValue("@PostBreakClockOut", model.PostBreakClockOut??DBNull.Value);

                   con.Open();

                   rowAffected = cmd.ExecuteNonQuery();
               }
           }

Jörgen Andersson

Кроме того, прекратите использовать AddWithValue!
https://blogs.msmvps.com/jcoehoorn/blog/2014/05/12/can-we-stop-using-addwithvalue-already/

2 Ответов

Рейтинг:
1

istudent

Я решил назначить новое значение TimeSpan(0,0,0) в качестве значения по умолчанию.

Это хорошая практика?


phil.o

Пожалуйста, используйте зеленый цвет Улучшить вопрос виджет, когда вы хотите, чтобы принести некоторые дополнительные детали к вопросу. Не используйте растворы для этой цели.

istudent

Извините, я этого не знал. Я сделаю это в следующий раз. Спасибо, что просветили меня.

Рейтинг:
1

phil.o

истудент писал::
Сотрудник может включать и выключать часы до того, как они пойдут на перерыв, и в этом случае я хотел бы вставить нулевое значение DB в свойства PostBreakClockIn и PostBreakClockOut.
Это не то, что ваш код на самом деле делает. Он только установил DBNull.Value для PostBreakClockOut И поскольку вы определили, что другие переменные также могут быть обнулены, вы должны учитывать и их обнуление. И вы должны использовать DateTime ценности вместо того, чтобы TimeSpan ценности. Один TimeSpan это продолжительность между двумя DateTimeс.
public DateTime? PreBreakClockIn { get; set; }
public DateTime? PreBreakClockOut { get; set; }
public DateTime? PostBreakClockIn { get; set; }
public DateTime? PostBreakClockOut { get; set; }

// ...

cmd.Parameters.AddWithValue("@PreBreakClockIn", model.PreBreakClockIn.HasValue ? model.PreBreakClockIn.Value : DBNull.Value);
cmd.Parameters.AddWithValue("@PreBreakClockOut", model.PreBreakClockOut.HasValue ? model.PreBreakClockOut.Value : DBNull.Value);
cmd.Parameters.AddWithValue("@PostBreakClockIn", model.PostBreakClockIn.HasValue ? model.PostBreakClockIn.Value : DBNull.Value);
cmd.Parameters.AddWithValue("@PostBreakClockOut", model.PostBreakClockOut.HasValue ? model.PostBreakClockOut.Value : DBNull.Value);

истудент писал::
Я решил назначить новое значение TimeSpan(0,0,0) в качестве значения по умолчанию.
Это хорошая практика?
Это зависит от значения значения. Если нулевая длительность может быть значимой, то это, вероятно, не очень хорошая идея, потому что тогда вы больше не можете различать между ненулевым значением и нулевой длительностью. Более того, это противоречит цели объявления обнуляемых столбцов и свойств.


istudent

Система, которую я пытаюсь построить, вычисляет только количество часов работы каждого сотрудника в день и общее количество часов, отработанных сотрудником за этот день. Мне не нужно беспокоиться о дате. Таков сценарий.