Как я могу гарантировать, что в БД будут вставлены только введенные данные?

#asp.net #vb.net

#asp.net #vb.net

Вопрос:

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

Пожалуйста, взгляните на приведенный ниже код. Человек, который разработал его изначально, сказал мне, что код добавляет только те строки данных, которые ввел пользователь. Другими словами, существует 5 строк текстовых полей. Пользователь может вводить данные в одну строку или во все 5 строк. Если пользователь вводит данные в одну строку текстового поля, это то, что вставляется в базу данных.

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

Поскольку я внес это изменение, независимо от того, вводит ли пользователь данные в одну строку или во все 5 строк, все 5 строк будут вставлены в базу данных.

Как я могу изменить этот код, чтобы гарантировать вставку только введенных строк?

Мне очень, очень жаль, что я снова побеспокоил вас, ребята, и большое спасибо за вашу помощь.

     For x = 1 To 5 Step 1
        dedval = obr.FindControl("ded" amp; CStr(x))
        chckvalflag = obr.FindControl("chck" amp; CStr(x))
        checkboxval = obr.FindControl("chckBox" amp; CStr(x))
        onetimeval = obr.FindControl("onetime" amp; CStr(x))
        chcknumval = obr.FindControl("chcknum" amp; CStr(x))
        multival = obr.FindControl("multi" amp; CStr(x))
        *If (chckvalflag.Text <> "" Or chckvalflag.Text <> "0") And Not checkboxval.Checked Then
            cashval = DirectCast(obr.FindControl("chck" amp; CStr(x)), TextBox).Text
            chckval = ""
            chcknumval.Text = "Cash Payment"
        Else
            chckval = DirectCast(obr.FindControl("chck" amp; CStr(x)), TextBox).Text
            chcknumval = obr.FindControl("chcknum" amp; CStr(x))
        End If*
        If dedval.Text <> "-1" And donatechoice.SelectedItem.Value <> "No" Then
            sql  = "INSERT INTO Contribs (employee_id, charity_code, check_amt, chcknum, one_time, bi_weekly, cash, donate_choice, date_stamp) "
            sql  = "VALUES ('" amp; Replace(employee_idLabel.Text, "'", "''") amp; "','" amp; Replace(dedval.SelectedValue, "'", "''") amp; "','" amp; Replace(chckval, "'", "''") amp; "','" amp; Replace(chcknumval.Text, "'", "''") amp; "','" amp; Replace(onetimeval.Text, "'", "''") amp; "','" amp; multival.Text amp; "','" amp; Replace(cashval, "'", "''") amp; "','" amp; Replace(donatechoice.SelectedItem.Value, "'", "''") amp; "','" amp; Replace(datestamp, "'", "''") amp; "');"
        End If
        If donatechoice.SelectedItem.Value = "No" Then
            x = 6
            sql  = "INSERT INTO Contribs (employee_id, charity_code, check_amt, chcknum, one_time, bi_weekly, cash, donate_choice, date_stamp) "
            sql  = "VALUES ('" amp; Replace(employee_idLabel.Text, "'", "''") amp; "','" amp; Replace(dedval.SelectedValue, "'", "''") amp; "','" amp; Replace(chckval, "'", "''") amp; "','" amp; Replace(chcknumval.Text, "'", "''") amp; "','" amp; Replace(onetimeval.Text, "'", "''") amp; "','" amp; Replace(multival.Text, "'", "''") amp; "','" amp; Replace(cashval, "'", "''") amp; "','" amp; Replace(donatechoice.SelectedItem.Value, "'", "''") amp; "','" amp; Replace(datestamp, "'", "''") amp; "');"
        End If
    Next
  

Комментарии:

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

2. Большое тебе спасибо, Джеймс. Я действительно ценю это. Кстати: Моего двоюродного брата зовут Джеймс Джонсон, и он священник. 🙂

Ответ №1:

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

 If Not String.IsNullOrEmpty(String.Concat(TextBox1.Text, TextBox2.Text, TextBox3.Text)) Then
    'insert logic here
End If
  

В качестве примечания я бы предложил изменить код, чтобы вместо него использовать параметры. Код созрел для SQL-инъекции.

Ответ №2:

  1. Рассмотрите возможность использования параметризованных хранимых процедур вместо построения SQL в виде строки. Прямо сейчас ваше приложение может быть внедрено в SQL. Если бы вы дали мне ссылку на ваше приложение, я мог бы стереть все данные в вашей Contribs таблице (при условии, что идентификатор, под которым выполняется поток, имеет разрешение; независимо от этого, ваш запрос может быть удален с помощью синтаксиса, основанного на вводе пользователем).

  2. Если вы хотите вставлять записи только в зависимости от того, какие текстовые поля заполнил пользователь, просто используйте оператор case или блок if для проверки значений в этих текстовых полях. Если пользователь ввел значение, выполните функцию, которая попадает в базу данных.