#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:
-
Рассмотрите возможность использования параметризованных хранимых процедур вместо построения SQL в виде строки. Прямо сейчас ваше приложение может быть внедрено в SQL. Если бы вы дали мне ссылку на ваше приложение, я мог бы стереть все данные в вашей
Contribs
таблице (при условии, что идентификатор, под которым выполняется поток, имеет разрешение; независимо от этого, ваш запрос может быть удален с помощью синтаксиса, основанного на вводе пользователем). -
Если вы хотите вставлять записи только в зависимости от того, какие текстовые поля заполнил пользователь, просто используйте оператор case или блок if для проверки значений в этих текстовых полях. Если пользователь ввел значение, выполните функцию, которая попадает в базу данных.