Как мне выйти из этой ошибки
Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression. The statement has been terminated.
Получаю эту ошибку всякий раз, когда один из вариантов любого вопроса остается пустым в открытом проекте опроса, поскольку я использую этот мир кода. всякий раз, когда я нажимаю на кнопку отправки, она показывает ошибку. И я хочу, чтобы если человек оставил какой-либо параметр пустым, он был сохранен в базе данных как 0
protected void BtnSubmit_Click(object sender, EventArgs e) { var collection = Repeater0.Items; foreach (RepeaterItem item in collection) { HiddenField QID = (HiddenField)item.FindControl("QID"); int q = int.Parse(QID.Value); string answer = Request.Form[q.ToString()]; string id = Convert.ToString(Session["UserID"]); string id2 = Convert.ToString(Session["ID"]); string connection = ConfigurationManager.AppSettings["connection"].ToString(); SqlConnection connec = new SqlConnection(connection); connec.Open(); SqlCommand cmd = new SqlCommand("Insert into t_AnswerSheet(UserId,QId, AnswerId,AnswerResult) values('" + id + "','" + q + "',(select AID from t_Answers where QId='" + q + "' and AOptions like'%" + answer + "%'),(select AnswerResult from t_Answers where QId='" + q + "' and AOptions like'%" + answer + "%'))", connec); cmd.ExecuteNonQuery(); connec.Close(); } Response.Redirect("LoginPage.aspx"); }
Что я уже пробовал:
foreach (RepeaterItem item in collection) { HiddenField QID = (HiddenField)item.FindControl("QID"); int q = int.Parse(QID.Value); string answer = Request.Form[q.ToString()]; string id = Convert.ToString(Session["UserID"]); string id2 = Convert.ToString(Session["ID"]); string connection = ConfigurationManager.AppSettings["connection"].ToString(); SqlConnection connec = new SqlConnection(connection); connec.Open(); SqlCommand cmd = new SqlCommand("Insert into t_AnswerSheet(UserId,QId, AnswerId,AnswerResult) values('" + id + "','" + q + "',(select AID from t_Answers where QId='" + q + "' and AOptions like'%" + answer + "%'),(select AnswerResult from t_Answers where QId='" + q + "' and AOptions like'%" + answer + "%'))", connec); cmd.ExecuteNonQuery(); connec.Close(); }
Richard Deeming
Ваш код уязвим для SQL-инъекция[^]. НИКОГДА используйте конкатенацию строк для построения SQL-запроса. ВСЕГДА используйте параметризованный запрос.
Все, что вы хотели знать о SQL-инъекции (но боялись спросить) | Трой Хант[^]
Как я могу объяснить SQL-инъекцию без технического жаргона? | Обмен Стеками Информационной Безопасности[^]
Шпаргалка по параметризации запросов / OWASP[^]