Правильный / Официальный способ использования подзапросов в подготовленных выражениях на C # - PullRequest
0 голосов
/ 13 декабря 2018

Я взломал программу в условиях стеснения / ограничения времени, которая создает записи по соединению ODBC, и теперь, когда ситуация закончилась, я бы хотел ее улучшить.Одна из вещей, которая выделяется, - это использование SQL-выражений для создания операторов.

Пример таблицы, в которую я в настоящее время вставляю:

INSERT INTO table1
(..., value1, foreign_key_1)
VALUES
(..., 'myvalue', (SELECT key FROM othertable WHERE othertable.name = 'some payment type'));

Способ работы подготовленного операторасначала нужно объявить ключи, используя

@identifier

, затем создать экземпляры SqlParameter, добавить тип и значение, добавить созданный параметр в оператор, подготовить его с помощью prepare() и, наконец, запустить его.

Теперь я хочу изменить свои INSERT, созданные вручную, чтобы использовать SqlCommand () и SqlParameter () для предотвращения атак с использованием SQL-инъекций.

Как мне объявить подзапрос, заполняющий поле вВставить заявление?Прямое решение было бы иметь SqlDbType.Subquery, но, похоже, такого нет.

Использую ли я SqlDbType.Structured или SqlDbType.Udt или SqlDbType.Variant, или это не поддерживаемая функцияна SqlCommand()?

...