Пожалуйста, помогите выяснить, что не так с этим оператором обновления базы данных из текстовых полей в C # - PullRequest
0 голосов
/ 08 июня 2011
comm.CommandText =
        "UPDATE studbiodata([Registration Number], Surname, Othernames, Email,"
      + " Phone, Address, Sex, [Birth Date], Religion, [Marital Status],"
      + " [No. of Children], [Next of Kin], Relationship, [Next of Kin Address])"
      + "SET ([Registration Number] ='" + txtRegNo.Text
      + "', Surname = '" + txtSurname.Text
      + "', Othernames = '" + txtOthernames.Text
      + "', Email = '" + txtEmail.Text
      + "', Phone = '" + txtPhone.Text
      + "', Address = '" + txtMainAdd.Text
      + "', Sex = '" + txtSex.Text
      + "', [Birth Date]= '" + txtBirthDate.Text
      + "', Religion = '" + txtReligion.Text
      + "', [Marital Status]= '" + txtMarital.Text
      + "', [No.of Children] = '" + txtChildren.Text
      + "', [Next of Kin]= '" + txtKin.Text
      + "', Relationship ='" + txtRelationship.Text
      + "', [Next of Kin Address]= '" + txtKinAdd.Text
      + "' WHERE [Registration Number]= '" + txtRegNo.Text + "')";

Сообщение об ошибке, которое я получаю после попытки обновить веб-форму:

 System.Data.SqlClient.SqlException (0x80131904): Incorrect syntax near '('. Incorrect syntax near the keyword 'SET'.
 at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection)
 at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection)
 at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning()
 at System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj)
 at System.Data.SqlClient.SqlCommand.RunExecuteNonQueryTds(String methodName, Boolean async)
 at System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(DbAsyncResult result, String methodName, Boolean sendToPipe)
 at System.Data.SqlClient.SqlCommand.ExecuteNonQuery()
 at Transcript.studentprofileedit.btnUpdate_Click(Object sender, EventArgs e)
 in C:\Users\Administrator.femzy-PC\Documents\Visual Studio 2010\Projects\Transcript Reloaded\Transcript\studentprofileedit.aspx.cs:line 119

Ответы [ 2 ]

8 голосов
/ 08 июня 2011

Первое, что я вижу неправильно, - это классический пример того, как сделать ваш сайт уязвимым для SQL-инъекций. Именно так НЕ для кодирования оператора SQL с использованием пользовательского ввода.

Вероятно, происходит то, что пользователь вводит что-то с одинарной кавычкой (апострофом), и это портит утверждение.

https://www.owasp.org/index.php/SQL_injection

http://en.csharp -online.net / ASP.NET_Security_Hacks% E2% 80% 94Avoiding_SQL_Injection

Используйте параметризованные запросы или хранимые процедуры с параметрами в качестве абсолютного первого шага. Это устранит ошибки, вызванные неожиданным вводом пользователя («O'Connor» в качестве фамилии, для Например, вызовет ошибку в выражении, закодированном таким образом). Тогда если проблемы все еще есть, вернитесь и посмотрите на утверждение. Вы можете использовать пользовательский ввод (почти каждая программа делает это) - вам просто нужно сделать это безопасно.

(последнее редактирование - еще одна хорошая статья)

http://www.codinghorror.com/blog/2005/04/give-me-parameterized-sql-or-give-me-death.html

4 голосов
/ 08 июня 2011

Синтаксис неверен, вам не нужно сначала указывать список столбцов.

ОБНОВЛЕНИЕ Studbiodatarital SET [Регистрационный номер] = '"+ txtRegNo.Text +"', Фамилия = '"+ txtSurname.Text +"', Другие имена = '"+ txtOthernames.Text +"', Email = '"+ txtEmail.Text + "', Phone ='" + txtPhone.Text + "', Address ='" + txtMainAdd.Text + "', Sex ='" + txtSex.Text + "', [Дата рождения] ='" + txtBirthDate.Text + "', Religion ='" + txtReligion.Text + "', [Семейное положение] ='" + txtMarital.Text + "', [No.of Children] ='" + txtChildren.Text + " ', [Next of Kin] =' "+ txtKin.Text +" ', Relationship =' "+ txtRelationship.Text +" ', [Next of Kin Address] =' "+ txtKinAdd.Text +" 'ГДЕ [Регистрационный номер ] = '"+ txtRegNo.Text +"')

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...