Можно ли вставить данные в таблицу через кодирование без использования имени таблицы - PullRequest
0 голосов
/ 30 июня 2011

Мой вопрос, как правило, заключается в том, что мы пишем следующее через код во время вставки данных в таблицу

     insert into tblname values('"+txt.text+"','"+txt1.text+"');

Когда мы передаем данные из текстовых полей, можно вставить их в таблицу с помощьюс использованием имени таблицы directlty

Ответы [ 4 ]

2 голосов
/ 30 июня 2011

Ну, очевидно, вам нужно знать, в какую таблицу вставлять, поэтому в операторе INSERT должно быть указано имя таблицы. Варианты включают в себя:

  1. оператор INSERT с реальным именем таблицы в соответствии с вашим существующим примером
  2. оператор INSERT с синонимом в качестве цели (псевдоним для фактической таблицы - см .: http://blog.sqlauthority.com/2008/01/07/sql-server-2005-introduction-and-explanation-to-synonym-helpful-t-sql-feature-for-developer/)
  3. оператор INSERT с обновляемым представлением в качестве цели
  4. вызов sproc, посредством которого sproc знает таблицу, в которую нужно вставить INSERT (но код вызова не должен знать)

Вы также должны знать о рисках внедрения SQL в своем примере - избегайте объединения значений непосредственно в строку SQL для выполнения. Вместо этого параметризуйте SQL.

Если вам нужно динамически указать таблицу для вставки во время выполнения, вам нужно объединить имя таблицы в оператор SQL, который вы затем выполните. Однако, будьте очень осторожны с SQL-инъекцией - убедитесь, что вы полностью проверили имя таблицы, чтобы убедиться, что в ней нет неприятностей. Вы даже можете проверить, что это настоящая таблица, проверив ее в sys.tables.

1 голос
/ 30 июня 2011

Вы не можете сделать это без имени таблицы, нет. Однако большая проблема в том, что ваш код ужасно опасен и находится под угрозой от внедрения SQL. Вы должны исправить это прямо сейчас, сегодня, немедленно . Инъекция, даже для внутренних приложений, представляет собой самый большой риск. Лучше код будет:

 insert into tblname (Foo, Bar) values(@foo, @bar)

добавление параметров @foo и @bar к вашей команде (очевидно, замените их разумными именами).

Прежде чем вы спросите: нет, имя таблицы не может быть параметризовано ; Вы не можете использовать

insert into @tblname -- blah

Имена таблиц являются (являются) фундаментальными в любом запросе или операции.

1 голос
/ 30 июня 2011

Невозможно без имени таблицы.

Но вы можете использовать Linq To SQL (то есть любой ORM) или DataAdapter.Update , если вы заполнили его соответствующей таблицей....

0 голосов
/ 30 июня 2011

Я полагаю, что если это возможно, вы должны использовать параметры.

Здесь у вас есть небольшой пример.

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