передача имени столбца с параметром SQLcommand - PullRequest
0 голосов
/ 04 февраля 2020

Я гуглил что-то, чего не могу понять. Короче говоря, моя проблема заключается в следующем:

При использовании этого;

String sYear2 = "2020";
string query = @"Select decJan from Stats where intRecnum = (select intRecnum from Stats where intAr = @year)";
var cmd = new SqlCommand(query, con);
cmd.Parameters.AddWithValue("@year", sYear2);

Результат возвращает «111» (что является правильным значением столбца decJan года 2020.

Но, пробуя это;

String sYear2 = "2020";
String sColumn2 = "decJan";
string query = @"Select " + @column + @" from tbFuGraddagar where intRecnum = (select intRecnum from tbfuGraddagar where intAr = @year)";
var cmd = new SqlCommand(query, con);
cmd.Parameters.AddWithValue("@year", sYear2);
cmd.Parameters.AddWithValue("@column", sColumn2);

Я получаю "decJan" как результат.

При поиске в Google все, что я обнаружил, что это невозможно без Dynami c SQL или это плохой дизайн.

Но я не понимаю, что такое разница ... все, что я хочу, это изменить код stati c на значение, похожее на @ year-параметр. "интерпретация" не должна заботиться о проверке SQL -синтаксиса, это просто вопрос о строковых манипуляциях.

Или я просто плохой C# -кодер?

1 Ответ

1 голос
/ 04 февраля 2020

Вероятно, метод addwithvalue недопустим для добавления динамических c имен столбцов в операторах выбора. Я думаю, что вы должны использовать функцию c# 8.0, интерполяцию строк, чтобы решить эту проблему. Вы можете добавить имена столбцов с помощью интерполяции строк. Можете ли вы попробовать этот подход:

String sYear2 = "2020";

string deccan = "decJan";

string query = $(Select {decJan} from Stats where intRecnum = (select intRecnum from Stats where intAr = @year)


query = @query;


var cmd = new SqlCommand(query, con);

cmd.Parameters.AddWithValue("@year", sYear2);
...