Проблема программирования без строки в позиции в этой таблице

0

Я новичок в кодировании, и у меня возникает следующая проблема. Когда я запускаю select, если нет строк, я получаю следующую ошибку

Изображение 174551, но в этом случае я хочу сделать вставку, как я могу это сделать? Это мой весь код:

   private DataRow verifica_pontajul()
    {

        string query = String.Format("select PR_ID,WORKER_Name,PR_Come,PR_Go, CURRENT_TIMESTAMP from 'ppresence' {0}",
                  (Functii.marca == "admin" ? "" :
                  String.Format("WHERE PR_WorkerPTR='{0}' ORDER BY PR_ID DESC LIMIT 1 ", this.marca)
                  ));


        return conn.dt(query,0).Rows[0];


    }





    public class liniepontaj
    {
        public long idlinie = 0;
        private string angajat = "";
        public DateTime DataIntrare = new DateTime();
        private DateTime DataIesire = new DateTime();
        public DateTime DataReferinta = new DateTime();
        private bool isIntrare = false;
        public bool facintrare = false;
        public bool faciesire = false;

        public liniepontaj() { }

        public liniepontaj(DataRow rand)
        {
            this.idlinie = long.Parse(rand.ItemArray[0].ToString());
            this.angajat = rand.ItemArray[1].ToString();
            this.DataIntrare = (DateTime)rand.ItemArray[2];
            try { 
            this.DataIesire = (DateTime)rand.ItemArray[3];
            }
            catch (Exception) { this.DataIesire = new DateTime(1, 1, 1, 0, 0, 0); }
            this.DataReferinta = (DateTime)rand.ItemArray[4];


            if (this.DataIesire == null || this.DataIesire != new DateTime(1, 1, 1, 0, 0, 0))  { isIntrare = true; } else { isIntrare = false; }


            TimeSpan t1 = DataReferinta - DataIntrare;
            TimeSpan t2 = DataReferinta - DataIesire;
            if ((t1.TotalMinutes < 15 && !this.isIntrare))
            {

                faciesire = false;
                facintrare = false;



            }
            else if (t2.TotalMinutes < 15 && this.isIntrare)
            {
                faciesire = false;
                facintrare = false;

            }
            else
            {
                facintrare = isIntrare;
                faciesire = !isIntrare;
            }
        }
    }

Где я должен изменить? Чтобы правильно вставить функциональность?

  • 2
    Что если условие WHERE не возвращает ни одной подходящей записи? Вы слепо используете строку в нулевой позиции, когда там нет данных
Теги:

2 ответа

1
Лучший ответ

В принципе, вам просто нужно проверить, есть ли какие-либо данные внутри Rows.

var dt = conn.dt(query, 0);
if (dt.Rows.Count == 0) return null;
else return dt.Rows[0];
1

Проверьте значение rowcount и, если оно больше или равно 1, а затем добавьте else insert

Ещё вопросы

Сообщество Overcoder
Наверх
Меню