Проблема с добавлением параметра - PullRequest
4 голосов
/ 09 мая 2011
SqlParameter param = new SqlParameter();
param.ParameterName = "@name";
param.Value = tableName;
SqlCommand cmd = new SqlCommand("select * from @name", con);
cmd.Parameters.Add(param);
SqlDataReader rd = cmd.ExecuteReader();

Приведенный выше код приводит к появлению следующего сообщения об ошибке:

Необходимо объявить табличную переменную "@name".

Почему я получаю эту ошибку и как ее исправить?

Ответы [ 3 ]

4 голосов
/ 09 мая 2011

Параметризованные запросы обычно имеют дело с параметрами для значений внутри запроса - не для имен таблиц, имен столбцов и т. Д. Я не верю, что SQL Server поддерживает параметризацию имени таблицы.

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

2 голосов
/ 09 мая 2011

Неправильный запрос

select * from @name

Пожалуйста, исправьте его, после того как From имя таблицы или представления ожидается, вы должны поставить свой параметр как 'select * from MyTable where col1 = @param'.

Вы можете 'вместо имени таблицы введите @param.Вместо этого используйте String.Format("select * from {0}", "MyTable");.

1 голос
/ 09 мая 2011

вместо передачи имени в запросе вы можете легко заменить его здесь

string s = "select * from " + name;
SqlCommand cmd = new SqlCommand(s, con);
SqlDataReader rd = cmd.ExecuteReader();

но это приведет к ошибке SQL инъекции

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

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