el_tot93 Ответов: 1

Контрольная ситуация в логине


Не могли бы вы пожалуйста помочь мне, чтобы получить решение для моей проблемы. Я использую базу данных SQL Server и c# у меня есть тренажерный зал, и я хочу, чтобы Чечин мой клиент входа в систему с его предложением.

предложения; 1 - по месяцам . 2 - по количеству дней.

мой стол предложений;

| ID | startdate |  month |  day  |  enddate  |      type        |<br />
| 1  | 2019-03-05|   3    | null  |2019-06-05 |Business Calendar |<br />
| 2  | 2019-03-05|  null  |   30  |2019-04-04 |Day Calendar      |


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

try
            {



                string che = @"(select count(*)from table where id='" + ID.Text + "' and startdate <='" + DateTime.Now + "' and endDate >='" + DateTime.Now + "' )";
                con.Open();
                SqlCommand sda = new SqlCommand(che, con);
                int count = (int)sda.ExecuteScalar();
                if (count > 0)
                {
                    using (SqlCommand com = new SqlCommand("INSERT INTO [checkin] (ID,time,username) VALUES (@ID,@time,@username)", con))
                    {
                        com.Parameters.AddWithValue("@ID", ID.Text);

                        com.Parameters.AddWithValue("@time", txttime.Text);

                        com.Parameters.AddWithValue("@username", txtusername.Text);
                        com.ExecuteNonQuery();
                    }
                    MetroFramework.MetroMessageBox.Show(this, "Check In Sucssesfuly ................... ", "Message", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
                else
                {
                    MetroFramework.MetroMessageBox.Show(this, "this ID Expired .....................", "Message", MessageBoxButtons.OK, MessageBoxIcon.Warning);


                }
                con.Close();
            }

            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
            finally
            {
                if (con.State == ConnectionState.Open)
                    con.Close();
            }


то что я ищу это добавить что то к этому коду если он день календарь количество дней не проверять дату окончания срока действия идентификатора

1 Ответов

Рейтинг:
2

OriginalGriff

Не делай этого так! Никогда не объединяйте строки для построения команды SQL. Это оставляет вас широко открытыми для случайной или преднамеренной атаки SQL-инъекции, которая может уничтожить всю вашу базу данных. Вместо этого всегда используйте параметризованные запросы.

Когда вы объединяете строки, вы вызываете проблемы, потому что SQL получает такие команды, как:

SELECT * FROM MyTable WHERE StreetAddress = 'Baker's Wood'
Цитата, добавленная пользователем, завершает строку в том, что касается SQL, и вы получаете проблемы. Но могло быть и хуже. Если я приду и наберу вместо этого: "x';DROP TABLE MyTable;--", то SQL получит совсем другую команду:
SELECT * FROM MyTable WHERE StreetAddress = 'x';DROP TABLE MyTable;--'
Которые SQL видит как три отдельные команды:
SELECT * FROM MyTable WHERE StreetAddress = 'x';
Совершенно правильный выбор
DROP TABLE MyTable;
Вполне допустимая команда "удалить таблицу"
--'
А все остальное-это комментарии.
Так оно и происходит: выбирает любые совпадающие строки, удаляет таблицу из базы данных и игнорирует все остальное.

Поэтому всегда используйте параметризованные запросы! Или будьте готовы часто восстанавливать свою БД из резервной копии. Вы ведь регулярно делаете резервные копии, не так ли?