C# SqlCommand - не может использовать параметры для имен столбцов, как решить?

Есть ли какой-либо путь, как сделать это? Это не работает:

SqlCommand command = new SqlCommand("SELECT @slot FROM Users WHERE name=@name; ");
prikaz.Parameters.AddWithValue("name", name);
prikaz.Parameters.AddWithValue("slot", slot);

Единственная вещь, о которой я могу думать, состоит в том, чтобы использовать SP и объявить и установить переменную для столбца. Кажется мне небольшим ackward.

6
задан abatishchev 25 July 2010 в 18:02
поделиться

2 ответа

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

string sqlCommandStatement =  
   string.Format("SELECT {0} FROM dbo.Users WHERE name=@name", "slot");

, а затем используйте хранимую процедуру sp_executesql в SQL Server для выполнения этой команды SQL (и при необходимости укажите другие параметры).

У динамического SQL есть свои плюсы и минусы - прочтите последнюю статью Проклятие и благословения динамического SQL , написанную специалистом по SQL Server Эрландом Соммарскогом.

4
ответ дан 8 December 2019 в 17:18
поделиться

Как уже упоминалось, вы не можете параметризовать основной запрос, поэтому вы нужно будет построить сам запрос во время выполнения. Вы должны занести в белый список входные данные this, чтобы предотвратить атаки инъекций, но в основном:

// TODO: verify that "slot" is an approved/expected value
SqlCommand command = new SqlCommand("SELECT [" + slot +
           "] FROM Users WHERE name=@name; ")
prikaz.Parameters.AddWithValue("name", name);

Таким образом, @name по-прежнему параметризовано и т. Д.

10
ответ дан 8 December 2019 в 17:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: