2012-01-30 4 views
2

error screenshotНевозможно вставить данные в базу данных в asp.net?

Я получаю данную ошибку при вставке данных в базу данных. Запрос в порядке. Я не знаю, что происходит.

+7

Обязательно: Пожалуйста, защитить свой код от [инъекции SQL] (http://en.wikipedia.org/wiki/SQL_injection). Это очень опасно. – jadarnel27

+0

спасибо за помощь – vini

ответ

4

У вас не хватает (, ), [ и ]:

Insert into [User] (Name, Uid) values ('"+tb1.Text+"', '"+tb1.Text+"')"; 

Обратите внимание на использование '[' и ']' вокруг заповедного слова пользователя. И, как @marc_s гласит: «Нужно реально использовать параметризованные запросы для того, чтобы избежать SQL Injection»

Проверить THIS для получения дополнительной информации.

+5

И снова: нужно действительно использовать ** параметризованные запросы **, чтобы избежать SQL Injection ..... –

+1

Или вы всегда можете увидеть ** [this] (http: // xkcd.com/327 /) ** для получения дополнительной информации =) – jadarnel27

+3

Старые добрые столы для бобби! – Curt

3

User это ключевое слово. Вы можете использовать зарезервированные ключевые слова, окружив их скобками []. И вы должны заключать значения в круглые скобки ().

Попробуйте следующее:

str = "Insert into [User] (Name, Uid) values 
     ('" + tb1.Text + "', '" + tb1.Text + "')"; 

Или, более читаемым:

str = String.Format("Insert into [User] (Name, Uid) values ('{0}', '{1}')", 
        tb1.Text, tb2.Text); 

Кроме того, как jadarnel27 отметил, пожалуйста, рассмотреть возможность использования параметризованного SQL для предотвращения SQL injection attacs.

+0

Тщеславие вверх! – jadarnel27

+0

=) спасибо @dennis – vini

10

3 вещи здесь не так.


Добавить скобки вокруг имени таблицы, как это ключевое слово:

INSERT INTO [User] 

Старайтесь избегать использования ключевых слов в именах объектов в будущем. Это может сэкономить много головных болей в долгосрочной перспективе!

View reserved keywords here


Добавить скобки вокруг значения, поэтому ваш запрос в виде:

INSERT INTO [TableName] (ColumnA, ColumnB) VALUES (@ParamA, @ParamB) 

Самое главное (как его ошибка 1 вы выиграли» t получить подсказку, но будет страдать в долгосрочной перспективе), параметризовать ваши запросы. Это позволит избежать SQL Injection и должна быть обычной практикой при написании любой SQL-запрос:

cmd.CommandText = "Insert into [User] (Name, Uid) values (@Name, @Uid)"; 
cmd.Parameters.Add("@Name", SqlDbType.Nvarchar).Value = tb1.Text; 
cmd.Parameters.Add("@Uid", SqlDbType.Int).Value = tb1.Text; 
+0

большое спасибо за ответ :) – vini

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