Goran Bibic Ответов: 2

Почему не работает проблема заключается в обновлении оператора из строки


<pre>private void prijavaAction()
        {
            if (textBox1.Text.All(char.IsDigit))

            {
                string queryString = "SELECT [ime_prezime]  FROM dbo.radnici WHERE bar_kod='" + textBox1.Text + "'";// pronaci radnika u bazi
                using (SqlConnection connection = new SqlConnection(cs))
                {
                    SqlCommand command = new SqlCommand(queryString, connection);
                    connection.Open();
                    SqlDataReader reader = command.ExecuteReader();
                    try
                    {
                        if (reader.Read())
                        {
                            notificationPanel.BackColor = System.Drawing.ColorTranslator.FromHtml("#FFE11A");
                            messageLabel.Text = (reader["ime_prezime"].ToString()) + "  je prijavljen u \n " + DateTime.Now.ToString("dd.MM.yyyy HH:mm:ss");
                            readerresultTextbox.Text = (reader["ime_prezime"].ToString());
                         }
                        else
                        {
                            notificationPanel.BackColor = System.Drawing.ColorTranslator.FromHtml("#FD7400");
                            messageLabel.Text = "Radnik ne postoji u bazi! \nProverite vašu karticu ili probajte ponovo!";
                            textBox1.Text = "";
                        }
                    }
                    finally
                    {

                        string prijava = "SELECT count (*) from dbo.prijava_radnika where vrijemeprijave is not null and vrijemeodjave is null and brojprijavnice2 is NULL and radnik=" + readerresultTextbox.Text;
                        SqlCommand provjeraprijaveradnika = new SqlCommand(prijava);
                        //con.Open();




                        if ((prijava != null)) //radi
                            //if ((prijava !))
                        {
                            String saveStaff = "INSERT INTO dbo.prijava_radnika (vrijemeprijave, status, radnik) VALUES(@vrijemeprijave,'prijavljen',@radnik)";


                            using (SqlConnection openCon2 = new SqlConnection(cs))
                            {

                                using (SqlCommand querySaveStaff = new SqlCommand(saveStaff))
                                {
                                    querySaveStaff.Connection = openCon2;
                                    querySaveStaff.Parameters.Add("@vrijemeprijave", SqlDbType.DateTime).Value = DateTime.Now;
                                    querySaveStaff.Parameters.Add("@radnik", SqlDbType.VarChar, 255).Value = readerresultTextbox.Text;
                                    openCon2.Open();
                                    querySaveStaff.ExecuteNonQuery();
                                    openCon2.Close();
                                }


                            }

                        }

                        else

                        {
                            String updateStaff = "UPDATE dbo.prijava_radnika SET vrijemeprijave=@vrijemeodjave, status='odjavljen' WHERE radnik=" + provjeraprijaveradnika.ToString();


                            using (SqlConnection openCon3 = new SqlConnection(cs))
                            {

                                using (SqlCommand queryupdateStaff = new SqlCommand(updateStaff))
                                {
                                    queryupdateStaff.Connection = openCon3;
                                    queryupdateStaff.Parameters.Add("@vrijemeodjave", SqlDbType.DateTime).Value = DateTime.Now;
                                    openCon3.Open();
                                    queryupdateStaff.ExecuteNonQuery();
                                    openCon3.Close();
                                }


                            }

                           

                        }

                    // Always call Close when done reading.
                    reader.Close();
                    }
                
                  }
            }
            else
            {
                notificationPanel.BackColor = System.Drawing.ColorTranslator.FromHtml("#FD7400");
                messageLabel.Text = "Bar kod nije važeci ili nije bar kod";
                textBox1.Text = "";


            }
        }


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

Проблема в обновлении, вставка работает нормально. Необходимо найти в dbo.prijava_radnika столбец radnik из строки querystring и обновить, если он существует. если не существует, то вставьте

Goran Bibic

За два дня я могу решить какую-нибудь простую задачу...Я не могу поверить

2 Ответов

Рейтинг:
11

Maciej Los

Правильный способ достичь этого-использовать UPDATE + SELECT на стороне SQL server. Видеть: Обновление не работает...условие sql я должен вставить[^]. Я бы предложил вам создание хранимой процедуры[^].


Рейтинг:
0

RickZeeland

Я думаю, что проблема в том, что:

SqlCommand provjeraprijaveradnika = new SqlCommand(prijava);
//con.Open();

if ((prijava != null)) //radi
Здесь код отсутствует, используйте что-то вроде этого:
con.Open();
Int32 prijavaCount = (Int32) provjeraprijaveradnika.ExecuteScalar();
if (prijavaCount <= 0)

Важным аспектом программирования является отладка, которую вы можете установить точка прерывания в вашем коде и посмотреть, если они попали, смотрите здесь для получения дополнительной информации: Использование Точек Останова[^]


Goran Bibic

Нет, обновление все еще не работает, вставьте рабочий pefect, но обновления нет

RickZeeland

Затем я бы установил точку останова в вашем операторе Update, посмотрел, как он выглядит в отладчике, и протестировал это, например, в среде SQL Server Management Studio.

Goran Bibic

Где Радник='" + провьераприяверадника.Метод toString() + "'";

эта строка ничего не находит, но в строке sql работает нормально.

Смотри...

Приложение предназначено для рабочих....Вставить в dbo.prijava_radnika форму таблицы работников(перев. radnici) uсигн имя и фамилию, и номер штрих-кода, вставка работает нормально, имя фамилия, дата, время входа в...п...позже, когда предприниматель едет домой, просто найдите его в таблице dbo базы данных.prijava_radnika по bar_code, а просто поставить insade datetime Для, что работник ...обновление этой строки

Goran Bibic

Вставить работу, обновить нет

Goran Bibic

Работник приходит в компанию, помещает в базу данных имя datatime, когда он заканчивает работу, обновляет эту строку с помощью datetime. Что мне нужно

RickZeeland

Итак, в среде SQL Server Management Studio работает команда update ?

Goran Bibic

Работает. Я думаю, что проблема здесь в чем-то была

строка prijava = "SELECT count (*) from dbo.prijava_radnika where vrijemeprijave is not null and vrijemeodjave is null and brojprijavnice2 is NULL and radnik=" + readerresultTextbox.Text;
Sqlcommand, который provjeraprijaveradnika = новая команда sqlcommand(prijava);
//con.Open();




if ((prijava != null)) //radi
//если ((приява !))

Goran Bibic

Приложение не может найти работника в dbo.prijava_radnika...это ...текстовое поле результата чтения или что-то еще

Goran Bibic

Где Радник='" + провьераприяверадника.Метод toString() + "'";

Goran Bibic

если ((prijava != null)) условие ОК?

RickZeeland

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

Goran Bibic

Удалить? У меня есть еще вниз

RickZeeland

Ах, теперь все становится ясно, ваше заявление об обновлении никогда не будет достигнуто, потому что оно находится в другой части !
Разве ты не поставил там точку останова, чтобы проверить, попал ли он ?

Goran Bibic

Нет. Что же теперь делать?

Goran Bibic

Что делать, чтобы обновить работу?