Member 13045876 Ответов: 1

Пожалуйста, помогите мне, я получил ошибку, должен объявить скалярную переменную "@branch".


общественный разделяемого класса Add_question : система.Веб.Пользовательского интерфейса.Страницы
{
protected void Page_Load(отправитель объекта, EventArgs e)
{
//if (! страница.IsPostBack)
//{
// DropDownList1.Источник Данных = DropDownList1.Элемент.Ценность;
// DropDownList1.DataBind();
//}
}
охраняемых недействительными обработчика button1_click(объект отправителя, EventArgs в электронной)
{
Объект sqlconnection кон = новое sqlconnection(@"источник данных=(localdb с)\В11.0;ключевое слово attachdbfilename=Ф:\ааааааааааа\отпечаток\папку App_Data\вопросы.МДФ;Комплексная безопасность=истина;");
против.Открыть();
строка str;
стр = "вставить в [вопросы] (филиал) значения (@филиал) (Semister) значения (@Semister) (Маркс) значения (@знаки) (вопросы) значения ('" + текстовое поле textbox1.Текст + "')";
SqlCommand cmd = новая SqlCommand(str, con);

УМК.Метод executenonquery();
против.Закрывать();

}
}

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

я попробовал как-то по-другому, но получил ту же ошибку

1 Ответов

Рейтинг:
7

OriginalGriff

Пожалуйста, поймите, что вы делаете.
Вы нашли какой-то код в интернете и скопировали его в свой код, не думая о том, как он должен работать. Затем вы добавили некоторый код, чтобы попытаться заставить его работать по-другому.

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

INSERT INTO MyTableName (firstColumnNameToInsertInto, secondColumnNameToInsertInto, ...) VALUES (valueToInserttoColumn1, valueToInsertToColumn2, ...)
Но затем вы смешиваете параметры (которые вы не предоставляете) с конкатенацией строк - и конкатенация является большой проблемой:
string sql = "INSERT INTO MyTable (MyColumn) VALUES ('" + myTextBox.Text + "')";
Это конкатенация строк, и она дает полный контроль над вашей БД вашему пользователю - просто набрав текст в текстовом поле, он может делать все, что ему нравится.
Никогда не объединяйте строки для построения SQL-команды. Это оставляет вас широко открытыми для случайной или преднамеренной атаки SQL-инъекции, которая может уничтожить всю вашу базу данных. Вместо этого используйте параметризованные запросы.

Но когда вы используете параметризованные запросы:
string sql = "INSERT INTO MyTable (MyColumn) VALUES (@MyValue)";

Вы должны указать значение параметра:
int myValueForTheColumn = 666;
string sql = "INSERT INTO MyTable (MyColumn) VALUES (@MyValue)";
SqlCommand cmd = new SqlCommand(sql, connection);
cmd.Parameters.AddWithValue("@MyValue", myValueForTheColumn);


Подумайте об этом и посмотрите, сможете ли вы решить, какой код вам нужно использовать, чтобы заставить это работать - это не сложно!
Дай мне знать, как у тебя дела.


Member 13045876

спасибо ошибка решена

OriginalGriff

Пожалуйста!