2014-12-03 2 views
-1
string sql = "Update stdrecord set firstname='" + fname + "',lastname='" + lname + "',mobile='" + mob + "',phone='" + phn + "',city='" + city + "',province'" + prov + "'where id='" + id + "'"; 

ошибка:Update вопрос запроса C#

System.Data.SqlClient.SqlException: Неправильный синтаксис

может кто-нибудь кор исправить запрос?

+4

использовать параметризованные запросы. –

+4

Сначала попробуйте свои запросы в своем менеджере баз данных. И вы всегда должны использовать [параметризованные запросы] (http://blog.codinghorror.com/give-me-parameterized-sql-or-give-me-death/). Этот тип конкатенаций строк открыт для [SQL Injection] (http://en.wikipedia.org/wiki/SQL_injection) атак. –

+0

можете ли вы запросить аргументированные запросы? – user3268114

ответ

8

Ваш отсутствующий равный:

"',province = '" + prov + "' where id='" + id + "'";

И не строить SQL-запросов, как это. Используйте параметр ADO.Net.

+0

Nice catch ....! Также вам следует упомянуть, что OP нужно пустое пространство перед 'WHERE' частью. –

-2

Поставьте пробел перед Where пункта и знака равенства в колонке провинции, получат работу на отлично

+0

Да, это тоже необходимо. –

+0

:) mistype only ... Извините –

+0

@ SonerGönül В этом случае пространство НЕ нужно, так как механизм запроса может анализировать 'SET x = '2'WHERE blah'. – DavidG

1

знак равенства отсутствует:

,province='" + prov + "' where id='" + id + "'"; 
1
string sql = "Update stdrecord set firstname='" + fname + "',lastname='" + lname + "',mobile='" + mob + "',phone='" + phn + "',city='" + city + "',province='" + prov + "'where id='" + id + "'"; 

Вы пропустите = после провинции и там нет места между prov и where!

Также в этом случае вы открыты для SqlInjection, используйте SqlCommand.Parameters.

Запрос должен выглядеть следующим образом.

string sql = @"Update stdrecord set [email protected] ,[email protected], [email protected], 
       [email protected],[email protected], [email protected] where [email protected]"; 

Это защитит вас от SqlInjection, а также SQL Server закроет ваш запрос.

Чтобы с помощью команды Параметры необходимо добавить этот код в ваш SqlCommand

SqlCommand cmd = new SqlCommand(sql, connectionString); 

cmd.Parameters.AddWithValue("@FName", fName); 
cmd.Parameters.AddWithValue("@LastName", lname); 
cmd.Parameters.AddWithValue("@Mobile", mob); 
cmd.Parameters.AddWithValue("@Phone", phn); 
cmd.Parameters.AddWithValue("@City", city); 
cmd.Parameters.AddWithValue("@Province", prov); 
cmd.Parameters.AddWithValue("@ID", id); 

С этой структурой у вас не будет проблем, как это в будущем, потому что вы не будете добавлять + и ' нон-стоп. Также используйте @, когда вы создаете строку, это дает вам возможность писать строку на более чем одной строке без использования +.

+0

http://blogs.msmvps.com/jcoehoorn/blog/2014/05/12/can-we-stop-using-addwithvalue-already/ – DavidG

+0

Статья, которая начинается с этого, должна прекратиться и может быть много. Пожалуйста, прекратите ссылаться на это, я могу написать все в своем блоге.Также, если вы хотите сказать что-то подобное, докажите! Я использовал AddWithValue из лет и 0 проблем, и он используется не с латинскими символами, а с nvarchars и снова с 0 проблемами. Я пишу вам, потому что вижу, что вы много раз публиковали мои ответы! – mybirthname

+0

Вы можете использовать его везде, где хотите, я не буду использовать его для вас, но я также не буду предлагать ему ответ. Я также использовал его в течение длительного времени и не имел проблем, но в какой-то момент , он может просто прийти и действительно укусить вас в тылу. Надеюсь, этого не случится. Лично я серьезно отношусь к рекомендациям Microsoft MVP (после проверки себя, конечно) – DavidG

Смежные вопросы