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

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

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

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

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

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

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

У Dynamic SQL есть свои плюсы и минусы – прочитайте последнюю статью «Проклятие и благословения динамического SQL», написанную SQL Server MVP Эрландом Соммарскогом.

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

 // 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 все еще параметризуется и т. Д.