DateTime SQL Проблема - PullRequest
       1

DateTime SQL Проблема

5 голосов
/ 21 сентября 2011

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

, а теперь мой код

string thisday = DateTime.Now.ToString("MM/dd/yyyy");

, затем чек

 public void button11_Click(object sender, EventArgs e)
    {
        string thisday = DateTime.Now.ToString("MM/dd/yyyy");
        errorProvider1.Clear();
        Data.docnum = txtDisplay.Text;
        if (txtDisplay.Text == "")
        {
            errorProvider1.SetError(txtDisplay, "Enter Docket Number");
            return;
        }
        using (var db = new DocketsDataContext())
        {
             var docketCheck = from q in db.Dockets where q.Status== "Ca"  select q;   
             string message = "";
             foreach (var d in docketCheck)
             {
                 message += String.Format(" DocketNum {0} - Status {1} - TimeRaised {2} - Thisday {3}\r\n", d.DocketNum, d.Status, d.TimeRaised, thisday);
             }
             MessageBox.Show(message);


            var complete = from q in db.Dockets
                           where q.DocketNum == txtDisplay.Text && q.Status.Equals("CL") //&& q.TimeRaised.Contains(thisday)
                           select q;

            var cancelcheck = from q in db.Dockets
                              where q.DocketNum == txtDisplay.Text && q.Status.Equals("Ca") && q.TimeRaised.Equals(thisday)
                              select q;

            var docketcheck = from q in db.Dockets
                              where q.DocketNum == txtDisplay.Text && q.Status.Equals("O") //&& q.TimeRaised.Contains(thisday)
                              select q;

            var statuscheck = from q in db.Dockets
                              where q.DocketNum == txtDisplay.Text &&  q.Status.Equals("Ea") //&& q.TimeRaised.Contains(thisday)
                              select q;


            if (cancelcheck.Count() >= 1)
            {
                MessageBox.Show(@"Match Found");
                txtDisplay.Clear();
                txtDisplay.ReadOnly = false;
                var cancel = new Cancel();
                cancel.ShowDialog(this);
            }

            else if (complete.Count() >= 1)
            {
                txtDisplay.Clear();
                txtDisplay.ReadOnly = false;
                var cat = new Docerror();
                cat.ShowDialog(this);
            }

            else if (statuscheck.Count() >= 1)
            {
                txtDisplay.Clear();
                txtDisplay.ReadOnly = false;
                var cat = new Category();
                cat.ShowDialog(this);
            }

            else if (docketcheck.Count() >= 1)
            {
                txtDisplay.Clear();
                txtDisplay.ReadOnly = false;
                var engs = new EngStart();
                engs.ShowDialog(this);
            }

            else
            {

                var sub = new machinesel();
                txtDisplay.Clear();
                sub.ShowDialog(this);
            }
        }

    }

когда этот день совпадает с сегодняшней датой, это должно вызвать функцию отмены, но это не так;есть идеи?

Jay

Ответы [ 2 ]

1 голос
/ 27 сентября 2011

Вы компилируете String с DateTime, которое никогда не вернет true.Попробуйте использовать следующее:

var cancelCheck = 
  (from q in db.Dockets
   where 
    q.DocketNum == txtDisplay.Text && 
    q.Status.Equals("Ca") &&
    q.TimeRaised.Date == DateTime.Now.Date
  select q).Any();

Также используйте Any() вместо Count() > 0

0 голосов
/ 26 сентября 2011

В своем запросе вы можете сделать что-то вроде этого:

from q in db.Dockets
where q.DocketNum == txtDisplay.Text  
&& q.Status.Equals("CL")  
&& (q.TimeRaised - DateTime.Today).Hours >= 0  
&& !(q.TimeRaised > DateTime.Today.AddDays(1))
select q;

Не уверен, возможно ли добавить записи с будущей датой, поэтому я добавил « DateTime.Today.AddDays (1) » Логика основана на классе TimeSpan, возвращенном при сравнении двух дат:

  TimeSpan ts = DateTime.Now - DateTime.Now.AddYears(-1);
  Console.WriteLine(ts.Days);

Что даст вам разницу в 365 дней.

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