Member 14083059 Ответов: 1

Как решить эту проблему? Неправильный синтаксис рядом с '@'.


Я пишу запрос на обновление в asp.net-да. когда я обновляю его, он показывает
Incorrect syntax near '@

ошибка здесь
Line 82:                 cmd.Parameters.AddWithValue("@repass", repass.Text);
Line 83:                 cmd.Parameters.AddWithValue("@imagelink", imagelink);
Line 84:                 cmd.ExecuteNonQuery();
Line 85:                 con.Close();
Line 86: 



мое определение таблицы:
Regist_ID	numeric(18, 0)	Unchecked
Name	nvarchar(100)	Unchecked
ParentsName	nvarchar(100)	Checked
DOB	nvarchar(MAX)	Checked
Gender	nvarchar(MAX)	Checked
ContactsNo	nvarchar(50)	Checked
EmailID	nvarchar(100)	Checked
Address	nvarchar(MAX)	Checked
Hobbies	nvarchar(MAX)	Checked
Password	nvarchar(50)	Checked
Re_Password	nvarchar(50)	Checked
Profile_IMG	nvarchar(MAX)	Checked


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

SqlConnection con = new SqlConnection(@"Data Source=Home-PC\SQLEXPRESS;Initial Catalog=KARATE-ACADEMY;Integrated Security=True");
               con.Open();
               String update = "update StdRegistration_db set Name= @name,ParentsName= @parentsname,DOB= @DOB,Gender=@Gender,ContactsNo= @contacts ,EmailID= @email,Address=address @,Hobbies= @activity,Password= @password,Re_Password= @repass ,Profile_IMG= @imagelink where  Name='" + Session["Name"].ToString() + "'";
               SqlCommand cmd = new SqlCommand(update, con);
               cmd.Parameters.AddWithValue("@name", name.Text);
               cmd.Parameters.AddWithValue("@parentsname", parentsname.Text);
               cmd.Parameters.AddWithValue("@DOB", DOB.Text);
               cmd.Parameters.AddWithValue("@Gender", Gender);
               cmd.Parameters.AddWithValue("@contacts", contacts.Text);
               cmd.Parameters.AddWithValue("@email", email.Text);
               cmd.Parameters.AddWithValue("@address", address.Text);
               cmd.Parameters.AddWithValue("@activity", activity);
               cmd.Parameters.AddWithValue("@password", password.Text);
               cmd.Parameters.AddWithValue("@repass", repass.Text);
               cmd.Parameters.AddWithValue("@imagelink", imagelink);
               cmd.ExecuteNonQuery();
               con.Close();

Richard MacCutchan

Я не думаю, что вам нужны символы " @ ‘ в именах параметров. Проверьте документацию, чтобы быть уверенным.

Member 14083059

сэр я пишу тот же запрос его работа хорошо подходит для вставки

Richard MacCutchan

Моя ошибка, но вы не объяснили, на какое утверждение ссылается сообщение об ошибке.

CHill60

Посмотрев на запрос еще раз, вы, по-видимому, храните пароли в виде обычного текста в своей базе данных. Это очень плохая практика. Смотрите эти статьи, чтобы понять, почему и что с этим делать
Хранение паролей: как это сделать.[^]
Соленое хэширование паролей - делаем это правильно[^]

Richard Deeming

Почему вы используете nvarchar(max) для Gender колонна? Даже если вы хотите быть таким же инклюзивным, как Facebook, и предоставить пользователю 71 вариант на выбор, ни один из них не понадобится 1 миллиард символов описать их.

И предполагая, что DOB это дата рождения пользователя, вы должны хранить ее как date- это не веревка. Мало того, что правильный тип данных займет меньше места, он также позволит избежать недопустимых или неоднозначных дат в вашей базе данных.

MadMyche

Слишком много nvarchar(Макс)

1 Ответов

Рейтинг:
10

CHill60

В своем запросе вы имеете

Address=address @,
Это должно гласить:
Address=@address,
В то время как я хвалю вас за использование параметризованного запроса, почему же вы идете и разрушаете его, вводя риск SQL-инъекции с помощью
where  Name='" + Session["Name"].ToString() + "'";
Это должно быть что-то вроде
where  Name=@SessionName";
и вам понадобится
cmd.Parameters.AddWithValue("@sessionname", Session["Name"].ToString());


Member 14083059

я использовал вышеизложенные изменения, теперь он показывает эту ошибку @CHill60

Параметризованный запрос '(@name nvarchar(13),@parentsname nvarchar(4000),@DOB nvarchar(10' ожидает параметр '@Gender', который не был указан.

CHill60

Но у вас есть строка кода

cmd.Parameters.AddWithValue("@Gender", Gender);
все еще там?

MadMyche

Это может быть вызвано, если Gender является нулевой.

CHill60

Хороший звонок!

Member 14083059

я знаю сэр и я использовал его для не нулевого пола
этот код : protected void rdb1_CheckedChanged1(object sender, EventArgs e)
{
Пол = "Мужской";
}
охраняемых недействительными rdb2_CheckedChanged1(объект отправителя, EventArgs в электронной)
{
Пол = "Женский";
}
общественного строка пол
{
получить;
набор;
}
но он все еще показывает ту же ошибку выше.

MadMyche

А если ни одно из этих событий кнопки не срабатывает, то какова их ценность?
Может тебе стоит попробовать

cmd.Parameters.AddWithValue("@Gender", Gender ?? "not checked");

Member 14083059

Спасибо, сэр, теперь это хорошо работает!!
@CHill60,@MadMyche

CHill60

Очень мило. Виртуальный 5